@Jörg Wunsch so habs so gemacht wie du gemeint hast.. und wer hätts gedacht es geht;) aber so ganz verstanden hab ich noch net warum meine version net lief. ich hab doch praktisch nur ein pointer der auf ne struktur innerhalb des puffers zeigt, übergeben. Und des volatile hab ich seither noch net verwendet weil ich net weiss was des bewirkt vielen dank des hat mir viel zeit erspart
(Bitte keinen neuen Thread für altes Zeug. Das macht es Anderen, die den Thread nachträglich verfolgen, praktisch unmöglich, die Auflösung zu erkennen. Außerdem erschwert es das Antworten.) > ich hab doch praktisch nur ein pointer der auf ne struktur innerhalb > des puffers zeigt, übergeben. Nein, du hast ein einzelnes Strukturelement kopiert, also nur den ersten Eintrag deiner fdisk-Tabelle extrahiert. Das ist erstens zusätzlicher Aufwand, schon von daher vermeidet man sowas eher, zweitens kannst du den Pointer nicht anschließend auf den nächsten Eintrag der Tabelle weiterschalten. In ganz altem C (pre-C89, das sogenannte ,,K&R-C'') konnte man Strukturen nicht direkt (ohne memcpy()) kopieren, schon daher ist das ein Feature, was C-Programmierer auch heute nur eher spärlich benutzen. Deine Variante hätte korrekt ungefähr so ausgesehen:
1 | void readPe1(unsigned char *buffer,struct tPartitionEntry **pe){ |
2 | MMC_read_sector(0,buffer); |
3 | *pe = (struct tPartitionEntry *)&buffer[PART_ENTRY_ONE]; |
4 | }
|
5 | |
6 | |
7 | int main(void) { |
8 | unsigned char buffer[512]; |
9 | struct tPartitionEntry *pe; |
10 | |
11 | readPe1(buffer,&pe); |
12 | return 0; |
13 | }
|
Du solltest dir das Kapitel über Zeiger und Felder in deinem C-Lehrbuch nochmal durchlesen...
Sorry wegen dem Thread.. so sachen mit pointern haben wir zwar in der schule behandelt... aber in visual c++ ham wir uns nie so intensiev damit befasst, was letztlich mit den variablen passiert und wo sie am ende stehen... da spielt die ram-größe au net so ne große rolle.. man hat ja 512MB davon.. (zumindest mit dieser einstellung wurde es und beigebracht) also vielen dank
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.