为struct成员分配内存时的奇怪错误

时间:2014-04-03 02:36:43

标签: c struct malloc

以下程序不会打印预期输出:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct {
    char *keyword;
    char *keyword2;
} my_struct;

int main(void) {

    char str[] = "keyword1,key word 2,keyword3,keyword 4";
    my_struct *pstr = NULL;
    int i, count;
    char *pch;

    // String break
    pch = strtok(str, ",");
    for (i = 0; pch != NULL; i++) {
        pstr = realloc (pstr, (i+1)*sizeof(my_struct *));
        pstr[i].keyword = malloc (strlen(pch) + 1);
        strcpy(pstr[i].keyword, pch);
        pch = strtok (NULL, ",");
    }
    count=i;

    // Print values
    for (i=0; i<count; i++) {
        printf("%d: %s\n", i, pstr[i].keyword);
    }

    return 0;
}

输出:

0: p`�
1: key word 2
2: (null)
3: keyword 4

但是如果我删除&#34; char * keyword2&#34;来自&#34; my_struct&#34;一切正常:

0: keyword1
1: key word 2
2: keyword3
3: keyword 4

有人可以向我解释为什么会这样吗?

2 个答案:

答案 0 :(得分:2)

好吧,我猜sizeof(my_struct *)会返回大小或指针。您需要使用sizeof(my_struct)

如果你删除了char *keyword2;,那么你会删除{{1}},因为结构的大小等于指针的大小(结构保存一个指针)。

答案 1 :(得分:1)

尝试更改

sizeof(my_struct *)

sizeof(my_struct )

                ^^ no asterisk