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;
}
主.c
int main(void) {
int i;
double * vector;
vector = foo(999999);
for(i =0;i < 999999; i++) {
printf("%f", vector[i]);
}
return 0
}
我的代码有什么问题?我遇到段错误(核心已转储),我的动态 vector 总是包含超过 1m 的元素。
最佳答案
您的主文件不包含 foo
的声明.所以编译器假设声明是int foo()
,即接受未知数量参数并返回 int
的函数.
编译时你应该得到类似这样的警告:
warning: implicit declaration of function ‘foo’
warning: assignment makes pointer from integer without a cast
因此,返回值未被正确捕获,导致 undefined behavior ,在本例中显示在核心转储中。
向 main 添加原型(prototype),应该可以修复错误。
double * foo(int length);
int main(void) {
...
你还应该 #include <stdio.h>
在 main.c 和 #include <stdlib.h>
中在 package.c 和 main.c 中获取 printf
的原型(prototype)和 malloc
分别。
此外,不要忘记 free(vector)
在程序结束时清理分配的内存。
关于c - 段错误(核心已转储),使用动态 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39416449/