我有以下结构:
struct message {
int id;
int ack;
int data_len;
char *data;
time_t timer;
} *messages, *temp;
我正在分配一块内存来保存至 numMessages 这些结构的数量:
messages = malloc(sizeof(messages)*numMessages);
然后通过调用函数ReadFromFile(int)添加 n 消息,并将count初始化为0
void 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;
}
}
}
HOWEVER ,未存储消息[count] .data。但是,如果我交换了行:
temp->data_len = nread;
和
temp->data = malloc( sizeof(char) * ( nread ));
数据已妥善存储,但现在没有存储data_len?我究竟做错了什么?除了事实,我确信有一个指针临时而不是处理内存是多余的......
谢谢!
答案 0 :(得分:2)
messages
是指向struct message
的指针,其大小与结构不同,更改为:
messages = malloc(sizeof(struct message) * numMessages);