gpt4 book ai didi

C 中引用其他结构的结构的构造函数

转载 作者:行者123 更新时间:2023-11-30 19:13:44 25 4
gpt4 key购买 nike

我是 C 新手。在我的头文件中,我有两个结构。一个是由另一个构建的。

mylist.h:

#pragma once        
struct Node {
void* data;
struct Node *next;
};

typedef struct Node node;

struct List {
Node* top;
};
typedef struct List* list;

我正在尝试构建构造函数。我有:

#include "mylist.h"
#include <stdio.h>
#include <stdlib.h>

static node data;
static list l;
stack newlist(){
l->top->data = NULL;
return l;
}

在 Main 中,我像这样调用构造函数:

int main(){
list m;
m = newlist();
}

但它永远不会进入main。我立即收到段错误。我不明白为什么;我正在通过堆栈访问内容。我需要先为列表分配空间吗?我不使用点运算符,因为列表是一个指针。

最佳答案

您需要为 l 分配内存第一的。这是因为list是指向结构体的指针的 typedef。因此,当您第一次声明l时,它只是一个指针,指向无效内存。尝试以下修改:

list newlist(){
list l;
l = malloc(sizeof(struct List));
if (!l) {
printf ("Error allocating memory (l)\n");
} else {
l->top = malloc (sizeof(struct Node));
if (l->top) {
l->top->data = NULL;
return l;
} else {
// On failure to allocate top free memory and return NULL
printf ("Error allocating memory (top)\n");
free(l);
l = NULL;
}
}
return l;
}

请注意 static list l移动到函数内部。您不需要其他静态全局 data (除非您在未显示的代码的另一部分中使用它,在这种情况下,我会将其重命名为其他名称以避免与 staruct 成员名称混淆)。

您需要包含<stdlib.h><stdio.h>如果您还没有它们。

此外,例如,您的结构定义需要进行一些更正

struct Node {
void* data;
struct Node *next;
};
typedef struct Node node;

struct List {
node* top;
};
typedef struct List* list;

关于C 中引用其他结构的结构的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35216033/

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