我编写了一个简单的程序,在链接列表的头部插入三个值。 它似乎在这个在线编译器上运行良好https://www.onlinegdb.com/online_c_compiler , 但是,当我尝试在 eclipse(或 devcpp)中运行它时,它崩溃了。
我使用的是 Windows 10 和 MinGW GCC 编译器
这是代码:
#include <stdio.h>
#include <stdlib.h>
struct list {
float value;
struct list * next_ptr;
};
void init (struct list **ptrptr);
void pre_insert(struct list **ptrptr, float value);
void visit(struct list * ptr);
int main()
{
struct list ** ptrptr;
init (ptrptr);
float value_1 = 47.2;
float value_2 = 13.23;
float value_3 = 3.4;
pre_insert(ptrptr, value_1);
pre_insert(ptrptr, value_2);
pre_insert(ptrptr, value_3);
visit(*ptrptr);
return 0;
}
void init (struct list** ptrptr){
*ptrptr=NULL;
}
void pre_insert(struct list ** ptrptr, float value){
struct list * tmp_ptr = *ptrptr;
*ptrptr = (struct list *)malloc(sizeof(struct list));
(*ptrptr)->value=value;
(*ptrptr)->next_ptr=tmp_ptr;
}
void visit(struct list * ptr) {
while(ptr!= NULL){
printf ("(%f)\n",ptr->value);
ptr = ptr->next_ptr;
}
printf("\n");
}
最佳答案
您的结构list ** ptrptr
未初始化并指向随机内存。
这将导致随机崩溃(段错误
)。
初始化指针:
struct list ** ptrptr = malloc (sizeof(struct list));
GCC 7.2.0编译的工作程序:
#include <stdio.h>
#include <stdlib.h>
struct list {
float value;
struct list * next_ptr;
};
void init (struct list **ptrptr);
void pre_insert(struct list **ptrptr, float value);
void visit(struct list * ptr);
void init (struct list** ptrptr){
*ptrptr = NULL;
}
void pre_insert(struct list ** ptrptr, float value){
struct list * tmp_ptr = *ptrptr;
*ptrptr = /*(struct list *)*/ malloc (sizeof(struct list));
(*ptrptr)->value = value;
(*ptrptr)->next_ptr = tmp_ptr;
}
void visit(struct list * ptr) {
while(ptr!= NULL){
printf ("(%f)\n",ptr->value);
ptr = ptr->next_ptr;
}
printf("\n");
}
int main()
{
struct list ** ptrptr = malloc (sizeof(struct list));
init (ptrptr);
float value_1 = 47.2;
float value_2 = 13.23;
float value_3 = 3.4;
pre_insert(ptrptr, value_1);
pre_insert(ptrptr, value_2);
pre_insert(ptrptr, value_3);
visit(*ptrptr);
return 0;
}
输出:
(3.400000)
(13.230000)
(47.200001)
关于c - 程序无法在eclipse上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48249482/