【问题标题】:Segmentation fault (core dumped) while using pointers in c [duplicate]在c中使用指针时出现分段错误(核心转储)[重复]
【发布时间】: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-&gt;hello[0] 分配一些东西来指向,但完全可以不将proc 本身设置为指向有效内存。
  • 当你声明 struct proc *proc; 时,变量 proc 是一个未初始化的指针,它没有任何关联的内存。当您取消引用它时,即proc-&gt;hello[0] 您会遇到分段错误。最好像这样声明你的变量:struct proc proc;,然后像这样使用它:proc.hello[0]
  • 用不同的名字命名你的变量、字段和结构类型也不会那么混乱。

标签: c pointers


【解决方案1】:

最好将变量名称与它们的类型分开。

所以

struct proc *proc;

我会推荐类似的东西

struct proc *my_proc;

但是,您出现段错误的原因是您试图在分配任何内存之前访问您的 *proc。

它可能为 NULL,但更可能的是,它包含的值的内存地址等于剩余内存占用的应该存储内存地址的空间。

所以我们假设它是 NULL 那么你编程的意思是什么

Start Program
Give me a pointer at NULL
Go to NULL and malloc
-- SEG FAULT-- 

你只需要 malloc 你的 *proc

int NUM_PROC = 1;
struct proc *my_proc = malloc(sizeof(struct proc) * NUM_PROC);

【讨论】:

  • SO 的共识是投出malloc 和朋友们的结果:stackoverflow.com/questions/605845/…
  • 嘿,是的。我在 SO 上学到的许多东西之一。在学校里,我总是被教导要投掷。在 c++ 中,你必须强制转换,否则我相信会出现编译器错误
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-04
  • 2015-05-12
  • 2016-01-11
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
相关资源
最近更新 更多