17. marts 2004 - 20:35Der er
11 kommentarer og 2 løsninger
Nulstilling af struct
Jeg har nogle initialiseringsproblemer i (ANSI) C.
Når jeg kompilere nedenstående i Borland C++ builder 3 er der ingen problemer men hvis jeg kompilere det i MS Visual C++ 6.0 er det bliver hele structen ikke nulstilles!?
Morten: Jeg har ikke noget svar på dit konkrete spørgsmål, men hvis du ikke er meget opsat på at optimere, ville jeg foreslå at klare initialiseringen vha. constructor'e:
coldplay: Du har ret i det kunne jeg jo godt have gjort med det samme: 4, 8, 10 henholdsvis, jeg mente de var 4, 6 og 8 i hvilket tilfælde dine tal havde været forkert hvis der var kørt med byte align 1 eller 2.
Undskyld jeg ikke har fulgt op på denne! Diskussionen tog vist en drejning der ikke hjalp mig! Summs sumarum: Jeg har stadig problemet og undrer mig over det - MSV kontra BCB. Men ja nogle havde ret i at det ikke helt er ANSI-C! (-;
Jeg tror ikke vi (der ikke har MSVC og BCB) kommer det nærmere med den tilgængelige information.
Selv ville jeg starte med følgende:
1. Finde det mindste eksempel, som giver problemet: Kan elementer af strukturen fjernes uden at problemet forsvinder? Er der problemer i et program, som kun lige indeholder de kodelinier, du har i oplægget?
2. Checke at værdien af bytes'ene i strukturen efter (mislykket) nulstilling virkelig er 0 (konvertér til char[sizeof(Hovedstruktur)] og udskriv integerværdien af hver char - evt. i hexnotation).
3. Prøve at nulstille en enkelt double for at se om MSVC bruger en eller anden "syg" repræsentation.
Det er desværre lidt svært med et lille eksempel da problemet opstod i en større program. Men tak for gode kommentarer. Jeg har fundet problemet og beklager hvis jeg har 'spildt jeres tid'!: Problemet opstod fordi et array blev fyldt med et element for meget og dermed sikkert har forrykket 'memmory'. Det undrer mig bare at BCB versionen tilsyneladende fungerede korrekt, mens MSVC versionen fejlede med det samme!
size_t er en variabeltype som kan indeholde størrelser. Ofte (på Linux) er dette bare intér inden bagved. Når i bruger menset skal i huske at fortælle at give en adresse med & memset(&buffer, 0, sizeof buffer);
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.