c - 为结构成员分配内存时出现奇怪的错误

标签 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

但是,如果我从“my_struct”中删除“char *keyword2”,一切正常:

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

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

最佳答案

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

如果您删除 char *keyword2;,它会起作用,因为结构的大小变得等于指针的大小(结构包含一个指针)。

关于c - 为结构成员分配内存时出现奇怪的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22826803/

相关文章:

c - 使用无限循环避免重复行,是好是坏?

c - 为什么这个程序不创建核心转储?

c - 使用二维数组的 malloc 和 strtok

c - 如何在循环中实例化新的结构实例

c - 释放使用 malloc 创建的结构,其成员也有一个 malloc

c - Xlib - 获取桌面 "Work Area"

c - 从c中的命令行读取数字

c++ - 嵌入式 Python 2.7.2 从用户定义的目录导入模块

c - C 中的二叉搜索树插入函数

c - 涉及结构体和数组的段错误,但不分开