Malloc 结构内的数组

Malloc an array inside a struct

我正在尝试 malloc 结构中的数组,但是当我 运行 程序时,我总是遇到分段错误。

compares 函数只是我正在测试的东西,所以它不应该是问题的一部分

typedef struct {
    char *string;
} prod_t;

int
main(int agrc, char **argv){
    int i = 0;
    prod_t *c = NULL;

    char str2[100] = "abcd";
    c->string = (char *) malloc( 5 * sizeof(char));
    strcpy(c->string,str2);

    compares(c->stock,str2,i);

    return 0;
}

首先,不要转换 malloc 的结果。您只需要在 C++ 中执行此操作。在C中,它实际上可以隐藏潜在的问题。

其次,您需要分配(或静态声明)您的结构。

第三,c->stock不存在。你可能是说 c->string.

typedef struct {
    char *string;
} prod_t;

int
main(int agrc, char **argv) {
    int i = 0;
    prod_t *c = malloc( sizeof( prod_t ));


    char str2[100] = "abcd";
    c->string = malloc( 5 * sizeof(char));
    strcpy(c->string,str2);

    compares(c->string,str2,i);

    return 0;
}

问题是您正在为字符串分配 space,但根本而不是 分配结构。 c 仍设置为 NULL 并且您正在尝试取消引用它。

在分配给它的成员之前为结构分配space

prod_t *c = malloc(sizeof(prod_t));

并且,作为您的 next-to-fix 错误的旁注:此字段不存在

c->stock

您需要先为结构分配 space,然后才能分配给 string 成员:

prod_t *c = malloc(sizeof(prod_t));

另见 Do I cast the result of malloc?