我正在尝试执行下面的代码,但它会返回分段消息。 我试图初始化列表,然后插入第一个节点(cabecera)并打印数据,但它会返回分段错误。 请帮帮我,不知道是什么问题。 提前谢谢。
#include<stdio.h>
#include<stdlib.h>
typedef struct NODO{
float data;
struct nodo* next;
struct nodo* before;
} nodo;
typedef struct CABECERA{
float data;
struct nodo* next;
} cabecera;
void init(cabecera *L){
L=NULL;
}
void pushBack(cabecera *L, float e){
cabecera *newnodo;
newnodo= (cabecera*)malloc(sizeof(cabecera));
newnodo->next= NULL;
newnodo->data=e;
L=newnodo;
}
int main(){
cabecera *milista;
init(milista);
pushBack(milista, 0.5);
printf("%f\n", milista->data);
return 0;
}
答案 0 :(得分:0)
缩进你的代码。
要找到问题,使用-g编译程序并在valgrind中运行它,它会告诉您问题的确切位置和位置。
总是用英文写作,它与C的其余部分相符,让其他人更容易理解和帮助你。
您没有使用自己制作的节点结构,但无论如何都要引用它。
#include<stdio.h>
#include<stdlib.h>
typedef struct NODO{
float data;
struct nodo* next;
struct nodo* before;
} nodo;
typedef struct CABECERA{
float data;
struct nodo* next;
} cabecera;
void init(cabecera **L){
*L=NULL;
}
void pushBack(cabecera **L, float e){ //You want to take a pointer to your pointer
cabecera *newnodo;
newnodo= (cabecera*)malloc(sizeof(cabecera));
newnodo->next= NULL;
newnodo->data=e;
*L=newnodo; // Here you want to modify the VALUE of your pointer.
}
int main(){
cabecera *milista;
init(&milista); // For init (and pushBack) to modify the value of the pointer, pass a pointer to it.
pushBack(&milista, 0.5);
printf("%f\n", milista->data);
return 0;
}
这是我2年前做过的玩具实现,它可以迭代两种方式,按索引访问元素(使用最短路径)并转换为/从数组。 https://github.com/DusteDdk/list