Speichern Ich habe folgende Struktur:Malloc Array von Strukturen, Daten in den Feldern nicht richtig
struct message {
int id;
int ack;
int data_len;
char *data;
time_t timer;
} *messages, *temp;
Ich bin ein Teil des Speichers Zuteilung bisnumMessages Menge dieser structs zu halten:
messages = malloc(sizeof(messages)*numMessages);
Und dann n Nachrichten können durch den Aufruf der Funktion Readfromfile (int), mit Zählung auf 0
initialisiert hinzugefügt werdenvoid readFromFile(int n) {
char input_buff[4096];
int size = sizeof(struct message);
for (int i = 0; i < n; i++) {
bzero(input_buff, sizeof(input_buff));
int nread = fread(input_buff, 1 , msgSize, fp);
if (nread > 0) {
printf("adding message: %d\n", count);
temp = (struct message *) malloc (sizeof (struct message));
temp->data_len = nread;
temp->id = count; // set integer id
temp->data = malloc(sizeof(char) * (nread));
temp->ack = 0;
memcpy(temp->data, input_buff, nread);
memcpy(&messages[count],temp,sizeof(temp));
count++;
free(temp);
}
if (nread < sizeof(input_buff)) {
if (feof(fp))
printf("End of file\n");
free(filename);
close(fp);
break;
}
if (ferror(fp)) {
printf("Error reading\n");
break;
}
}
}
JEDOCH, messages [count] .data wird nicht gespeichert. Wenn jedoch tauschen ich die Zeilen:
temp->data_len = nread;
und
temp->data = malloc(sizeof(char) * (nread));
Die Daten richtig gespeichert ist, aber jetzt DATA_LEN nicht gespeichert? Was mache ich falsch? Abgesehen davon, dass ich sicher bin, dass ein Zeiger temp und dann die Bewältigung des Speichers redundant ist ...
Vielen Dank!
[Sie das Ergebnis von malloc nicht gegossen] (http://stackoverflow.com/ questions/605845/do-i-cast-das-ergebnis-von-malloc) – Barmar
'memcpy (& messages [count], temp, sizeof (temp));' sollte auch 'sizeof (* temp)' – immibis
sein "Ich habe die folgende Struktur: "- Nein! Sie haben Zeiger auf diese "struct" – Olaf