|
Titlul: memcpy Scris de: VladS din Noiembrie 05, 2005, 16:01:13 Aveam la o problema ceva de genu memcpy(a, b, sizeof(b) ); unde b era vector constant. Si luam wa pe 5 teste. Am facut debuging o saptamana. Am schimbat cu o copiere cu for si, surpiza, am luat 100. Stie cineva care ar fi explicatia?
Titlul: memcpy Scris de: Valentin Stanciu din Noiembrie 05, 2005, 18:05:29 sigur ai pus bine argumentele?
memcpy(sursa, destinatie, cat) Titlul: memcpy Scris de: Daniel Pasaila din Noiembrie 05, 2005, 18:31:26 Bineinteles ca functiile care lucreaza cu memoria sunt sigure. Verifica daca vectorul b nu e mai mare cunva decat vectorul a, astfel poti sa scrii peste marginea superioara a lui a. Altceva nu stiu ce ar putea fi...
Titlul: memcpy Scris de: VladS din Noiembrie 09, 2005, 20:17:51 M-am mai uitat odata pe sursa si am gasit ceva de genu.
Cod:
Unde pre[a] e vector constant. Oricum ciudat ca a mers doar pe o parte din teste... Titlul: memcpy Scris de: Mircea Pasoi din Noiembrie 09, 2005, 20:59:34 Citat din mesajul lui: TYTUS M-am mai uitat odata pe sursa si am gasit ceva de genu. Cod:
Unde pre[a] e vector constant. Oricum ciudat ca a mers doar pe o parte din teste... hmm, la apelul operatorului = cu int x[] ca parametru, ia vezi cat e sizeof(x).. cred ca x este transmis ca int* , deci sizeof(x) va fi sizeof(int), adica 4, deci copierea nu face mare lucru Titlul: memcpy Scris de: VladS din Noiembrie 10, 2005, 08:28:35 Eu folosesc mereu formatul asta de apel (cu sizeof ) la functiile cu memoria si pana acum nu am mai avut probleme.
S-ar putea ca sizeof( const int[]x) != sizeof (int []x ) ? Titlul: memcpy Scris de: cristi8 din Noiembrie 10, 2005, 12:42:21 Cod: int x[1200]; apelul "f(x);" afiseaza 4. Titlul: memcpy Scris de: Mircea Pasoi din Noiembrie 10, 2005, 12:45:05 Citat din mesajul lui: TYTUS Eu folosesc mereu formatul asta de apel (cu sizeof ) la functiile cu memoria si pana acum nu am mai avut probleme. S-ar putea ca sizeof( const int[]x) != sizeof (int []x ) ? Ai verificat ce ti-am zis? Cand trimiti un vector ca parametru se trimite ca int* , deci sizeof() va fi 4, nu marimea vectorului. Titlul: memcpy Scris de: VladS din Noiembrie 13, 2005, 10:08:16 Am verificat, aveti dreptate. Deci daca mai fac copiere intr-o functie corect ar fi
Cod: memcpy(a,b, d*sizeof(b) ); Bine ca stiu, oricum pana acuma nu m-am ars la faza asta, da puteam s-o patesc intr-un concurs. Mersi. Titlul: memcpy Scris de: cristi8 din Noiembrie 13, 2005, 11:30:00 dar vezi in interiorul functiilor cand primesti ca parametru ceva si tu stii ce marime are, e mult mai sigur sa pui
Cod: 1008*sizeof(int) asta in caz ca stii ca ai defapt un "int x[1008];" |