Malloc结构数组,字段中的数据未正确保存

时间:2016-05-06 01:34:05

标签: c arrays struct malloc

我有以下结构:

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?我究竟做错了什么?除了事实,我确信有一个指针临时而不是处理内存是多余的......

谢谢!

1 个答案:

答案 0 :(得分:2)

messages是指向struct message的指针,其大小与结构不同,更改为:

messages = malloc(sizeof(struct message) * numMessages);