我有一个结构定义如下:

struct Complex {
double _real;
double _img;
};


我正在尝试创建一个函数,该函数根据c字符串输入返回一个指向新复数的指针。首先,我根据在其他stackoverflow问题上所看到的内容,尝试创建一个结构:

 struct Complex * newComplex = (struct Complex*)malloc(sizeof(struct Complex));


可悲的是,代码在运行时崩溃,并说:

    0 [main] complex 14380 cyg
 trace to complex.exe.stackdump


我还尝试运行以下命令,并导致相同的错误:

struct Complex * newComplex;
newComplex = (struct Complex*) malloc(sizeof(struct Complex));


当我尝试调试这段代码时,我将其分解为几个部分,提供了以下代码,这些代码似乎可以正常工作:

 struct Complex * newComplex = (struct Complex*)malloc(sizeof(struct Complex));
 void *temp = malloc(sizeof(struct Complex));
 newComplex = (struct Complex*) temp;


我很想对此行为做出解释。

最佳答案

您的初始代码看起来不错,问题一定在其他地方。

// test.c
#include <stdlib.h>
#include <stdio.h>

struct Complex {
    double _real;
    double _img;
};

int main() {
    struct Complex * newComplex = malloc(sizeof(struct Complex));

    newComplex->_real = 0;
    newComplex->_img = 1.0;

    printf("(%f %f)\n", newComplex->_real, newComplex->_img);
    free(newComplex);
    return 0;
}


gcc -Wall test.c ; ./a.out产生:

(0.000000 1.000000)

关于c - 创建指向结构的指针将提供open_stackdumpfile,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41172707/

10-11 22:54
查看更多