C语言 带有malloc和结构的分段错误(核心转储)



我不明白为什么这个简单的代码不能在不导致 linux 分段错误的情况下运行:

#include <stdlib.h>
struct entry
{
int value;
};
void initEntry(struct entry *entry)
{
entry = malloc(sizeof(struct entry));    
entry->value = 0;
}
int main()
{
struct entry *list;
initEntry(list);    
list->value = 5;
}

我可以在删除最后一条指令(list->value = 5;(后运行该程序

我编译:

gcc main.c -o main

您需要将其更改为:

void initEntry(struct entry **entry) {
*entry = malloc(sizeof(struct entry));    
(*entry)->value = 0;
}
int main() {
struct entry *list;    
initEntry(&list);    
list->value = 5;
}

在您的代码中,您只是在从initEntry()调用返回后丢失分配内存的地址。这是因为entry参数是关于initEntry()函数的局部变量,并且为其分配任何值从外部是不可见的。您需要一个额外的安装级别才能返回分配内存的地址。

相关内容

  • 没有找到相关文章

最新更新