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元素。
答案 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>
分别获取printf
和malloc
的原型。
另外,不要忘记在程序结束时free(vector)
清理已分配的内存。