指向结构中的指针

时间:2014-08-12 13:49:52

标签: c pointers struct

有人可以帮忙解释为什么我的代码部分无效吗?

typedef struct {
    char *something;
} random;

random *rd;
rd->something = calloc(40, sizeof(char)); // This is the line which crashes
strncpy(rd->something, aChar, 40);

如果我这样写,该程序是有效的:

random rd;
rd.something = calloc(40, sizeof(char));
strncpy(rd.something, aChar, 40);

但我认为在处理内存时这是错误的,这就是为什么我需要第一种情况的帮助。

4 个答案:

答案 0 :(得分:2)

没有内存分配给rd指向的结构。

尝试:

typedef struct {
    char *something;
} random;

random *rd = malloc (sizeof(random));
rd->something = calloc(40, sizeof(char)); // This is the line which crashes
strncpy(rd->something, aChar, 40);

答案 1 :(得分:0)

这是因为你定义的指针

random *rd;

未正确初始化,因此您会遇到分段错误。第二个版本有效,因为您实际分配了rd。要使第一个版本正常工作,请使用

*rd分配内存
random *rd = (random*)malloc(sizeof(random));

答案 2 :(得分:0)

案例1:

random *rd;

// Create *pointer* to struct of type random . Doesn't point to anything.

rd->something = calloc(40, sizeof(char)); 

// Use it by trying to acquire something which doesnt exist and it crashes

案例2:

random rd;

// Create a random struct

rd.something = calloc(40, sizeof(char));

// Use it . Works good

===========================

对于案例1,您需要先分配一个结构,使指针指向它,然后使用->运算符修改值

答案 3 :(得分:0)

它会工作,但首先将内存分配给rd。 rd =(random *)calloc(1,sizeof(random));