c - 段错误(核心已转储),使用动态 vector

标签 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;
}

主.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/

相关文章:

c - 指向不同字符串文字的两个 char 指针的地址相同

c++ - 字符串分配的段错误

C - 在函数中分配矩阵

c - 初始化元素不是常量

c - 查找两个文件不同的所有字节位置

objective-c - 有没有办法从SIGSEGV获取更多信息?

c - 在 C 中使用 memcpy 时出现段错误

c - 线程的执行 - 输出原因

c++ - 当原始指针和唯一指针都引用同一个对象时,如何避免双重释放?

java - Java中的赋值运算符