VladS
Vizitator
|
|
« : 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?
|
|
|
Memorat
|
|
|
|
•svalentin
|
|
« Răspunde #1 : Noiembrie 05, 2005, 18:05:29 » |
|
sigur ai pus bine argumentele? memcpy(sursa, destinatie, cat)
|
|
|
Memorat
|
|
|
|
•danielp
|
|
« Răspunde #2 : 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...
|
|
|
Memorat
|
I can't get a life if my heart's not in it
|
|
|
VladS
Vizitator
|
|
« Răspunde #3 : Noiembrie 09, 2005, 20:17:51 » |
|
M-am mai uitat odata pe sursa si am gasit ceva de genu. inline void operator = (int x[]) { memcpy(v,x,sizeof(x)); } ... bla= pre[ a ];
Unde pre[a] e vector constant. Oricum ciudat ca a mers doar pe o parte din teste...
|
|
|
Memorat
|
|
|
|
•domino
|
|
« Răspunde #4 : Noiembrie 09, 2005, 20:59:34 » |
|
M-am mai uitat odata pe sursa si am gasit ceva de genu. inline void operator = (int x[]) { memcpy(v,x,sizeof(x)); } ... bla= pre[ a ];
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
|
|
|
Memorat
|
|
|
|
VladS
Vizitator
|
|
« Răspunde #5 : 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 ) ?
|
|
|
Memorat
|
|
|
|
cristi8
Vizitator
|
|
« Răspunde #6 : Noiembrie 10, 2005, 12:42:21 » |
|
int x[1200];
inline void f (int x[]) { printf("%d\n", sizeof(x)); }
apelul "f(x);" afiseaza 4.
|
|
|
Memorat
|
|
|
|
•domino
|
|
« Răspunde #7 : Noiembrie 10, 2005, 12:45:05 » |
|
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.
|
|
|
Memorat
|
|
|
|
VladS
Vizitator
|
|
« Răspunde #8 : Noiembrie 13, 2005, 10:08:16 » |
|
Am verificat, aveti dreptate. Deci daca mai fac copiere intr-o functie corect ar fi 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.
|
|
|
Memorat
|
|
|
|
cristi8
Vizitator
|
|
« Răspunde #9 : 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 asta in caz ca stii ca ai defapt un "int x[1008];"
|
|
|
Memorat
|
|
|
|
|