malloc结构中的数组

时间:2015-05-18 17:12:44

标签: c arrays struct malloc

我正在尝试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;
}

3 个答案:

答案 0 :(得分:5)

问题是你要为字符串分配空间,但你 根本没有分配结构。 c仍然设置为NULL,您试图取消引用它。

在分配给其成员之前为结构分配空间

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

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

c->stock

答案 1 :(得分:4)

在分配给string成员之前,您需要为结构分配空间:

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

另见Do I cast the result of malloc?

答案 2 :(得分:2)

首先,不要施放malloc的结果。你只需要在C ++中这样做。在C中,它实际上可以隐藏潜在的问题。

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

第三,c->股票不存在。你可能意味着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;
}