gpt4 book ai didi

c - C中的新struct Linked-List,可以编译但不能执行

转载 作者:行者123 更新时间:2023-11-30 20:59:07 24 4
gpt4 key购买 nike

我想在LList中存储一个新的struct data,数据类型包括字符串,这段代码可以编译,但是当我执行它时,它只是返回list.exe 已停止工作。我的代码有什么问题吗?

typedef struct data{
int vertex;
char url[10];
}Data;


typedef struct Node {
Data *v;
struct Node *next;
} Node;

Node *makeNode(Data n) {
Node *new_node = (Node*)malloc(sizeof(Node));
assert(new_node != NULL);
new_node->v->vertex = n.vertex;
strcpy(new_node->v->url,n.url);
new_node->next = NULL;
return new_node;
}

int main(){
Data n1;
n1.vertex = 1;
strcpy(n1.url,"a1");;
Node *a = makeNode(n1);
}

最佳答案

what's wrong with my code?

就是这样:

  new_node->v->vertex = n.vertex;

特别是,您取消引用 new_node->v ,就像它是一个合法地址一样,而它是一个随机值。因为这一行:

   Node *new_node = (Node*)malloc(sizeof(Node));

malloc() 确实为您分配了 new_node,但它是一个充满随机剩余字节的内存区域,因此 new_node->v 此时只是您 PC RAM 中的随机二进制序列。

当引用随机数作为地址时,您的程序将从操作系统请求一个与您的程序无关的内存区域。操作系统会识别它,发出“段错误”错误(字面意思是“你的内存段超出了,伙计”)并终止你的进程。

关于c - C中的新struct Linked-List,可以编译但不能执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48473301/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com