我是 C 的新手,所以请更正这个问题中的任何内容,而且我的问题也可能太含糊了。我有这样的代码,但出现了段错误。我在网上读到,当你访问一个指向任何东西的指针时,通常会发生段错误
struct apple get(char* name) {
struct apple a;
a.name = name;
return a;
}
struct apple* read(){
struct apple* ap = (struct apple*)malloc(2*sizeof(struct apple));
ap[0] = get("bob");
return ap;
}
// loop through in another function which reads a pointer to an
// apple object in the array and then accesses apple->name
当它访问 apple->name 时出现段错误。我假设这是因为 apple 对象被声明为局部变量,后来被 c 释放了???我真的不知道为什么我会遇到段错误或如何修复它或 c 如何处理在函数中初始化为局部变量的释放结构。谁能告诉我这是怎么回事,谢谢!
最佳答案
好吧,当指针指向某些错误的时,就会发生段错误,而当指针为空时则不一定。
您发布的代码片段没有任何错误:"bob"
是一个 char*
在程序的生命周期内保持有效,并且返回apple
是按值完成的,因此您也不会返回指向本地的指针。问题很可能出现在迭代 read()
返回的苹果的代码中。
关于c - C 中的指针和段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8870934/