c中的分段错误

时间:2017-06-06 12:29:46

标签: c list

我正在尝试执行下面的代码,但它会返回分段消息。 我试图初始化列表,然后插入第一个节点(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;
}

1 个答案:

答案 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