【发布时间】:2017-07-24 04:51:54
【问题描述】:
我正在处理一个项目并尝试执行如下所示的类似操作,但出现分段错误错误。我不明白为什么它会给出这个错误,即使我使用 malloc 分配了内存。对此错误的任何帮助表示赞赏。
#include <stdio.h>
struct hello{
int i;
};
struct proc{
int j;
struct hello *hello[20];
};
int main()
{
struct proc *proc;
proc->hello[0] = malloc(sizeof(struct hello));
proc->hello[0]->i =10;
printf("value of i: %d\n",proc->hello[0]->i);
return 0;
}
【问题讨论】:
-
我觉得奇怪的是,你知道你应该为
proc->hello[0]分配一些东西来指向,但完全可以不将proc本身设置为指向有效内存。 -
当你声明
struct proc *proc;时,变量 proc 是一个未初始化的指针,它没有任何关联的内存。当您取消引用它时,即proc->hello[0]您会遇到分段错误。最好像这样声明你的变量:struct proc proc;,然后像这样使用它:proc.hello[0]。 -
用不同的名字命名你的变量、字段和结构类型也不会那么混乱。