c - 程序无法在eclipse上运行

标签 c eclipse

我编写了一个简单的程序,在链接列表的头部插入三个值。 它似乎在这个在线编译器上运行良好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/

相关文章:

c - GLib的GAsyncQueue保证是先进先出的吗?

C 中的命令行参数

c - 为什么c中定义和声明的函数原型(prototype)不相同时没有警告?

java - 在 Eclipse 中将 Java 应用程序导出为可运行 Jar - 启动配置中的旧项目

c - 段错误 11,尽管分配了足够的内存

Maven 2 和 Web 项目的 Eclipse Helios 集成

java - 我的服务器应用程序无法在 Eclipse 上运行

Java Decompiler for Eclipse (JD-Eclipse) 未在 Ganymede 中运行

java - Google App Engine - Servlet(错误 : Expecting a stackmap frame at branch target 44 in method test.)

c - 在 C 中,编译时计算什么?