分段错误(核心转储),使用动态向量

时间:2016-09-09 16:59:54

标签: c pointers segmentation-fault

package.c:

double * foo(int length) {

int i;
double * a;

a = malloc(sizeof(double) * length)

for(i = 0; i < length; i++ ) {
     a[i] = 0.0;
}

return a;
}

的main.c

int main(void) {
    int i;
    double * vector;

    vector = foo(999999);

    for(i =0;i < 999999; i++) {
         printf("%f", vector[i]);
    }

    return 0
}

我的代码有什么问题?我得到了分段错误(核心转储),我的dinamic向量总是超过1m元素。

1 个答案:

答案 0 :(得分:0)

您的主文件不包含foo的声明。因此编译器假定声明为int foo(),即一个接收未知数量的参数并返回int的函数。

编译时,你应该收到类似的警告:

warning: implicit declaration of function ‘foo’
warning: assignment makes pointer from integer without a cast

因此,未正确捕获返回值,导致undefined behavior,在这种情况下显示在核心转储中。

将原型添加到main,这应该可以解决错误。

double * foo(int length);

int main(void) {
   ...

您还应该在main.c中#include <stdio.h>和package.c和main.c中的#include <stdlib.h>分别获取printfmalloc的原型。

另外,不要忘记在程序结束时free(vector)清理已分配的内存。