1

我正在尝试在 C 中复制 Matlab 和 numpy (python) 中的 linspace 函数,但是,我不断收到关于取消引用 NULL 指针的警告。

我是 C 语言的新手,之前只在 Matlab、python 和 lua 中工作过,指针是非常值得尝试的东西!

#include <stdlib.h>
#include <stdio.h>
#include <math.h>

 double* linspace(double init, double fin, int N) {
     double *x;
     int i = 0;
     double step = (fin - init) / (double)N;
     x = (double*)calloc(N, sizeof(double));

     x[i] = init; /*<=== Line 14*/

     for (i = 1; i < N; i++) {
         x[i] = x[i - 1] + step;
     }
     x[N - 1] = fin;
     return x;
}

int main() {
    double *x_array = linspace(0, 10, 1000);

    printf(&x_array);

    free(x_array);
    return 0;
}

我得到了确切的警告:

Warning C6011   Dereferencing NULL pointer 'x'. Line 14

显然,我确定这只是一个菜鸟错误,但我不确定如何对其进行排序!

谢谢。

4

1 回答 1

4

以下消息:

Warning C6011   Dereferencing NULL pointer 'x'. Line 14

不是运行时错误。这是 Microsoft C++ 编译器发出的措辞非常糟糕的警告(请参阅https://docs.microsoft.com/en-us/cpp/code-quality/c6011?view=vs-2019)关于您可能是取消引用可能NULL运行时的指针。

NULL如果无法分配内存,您的指针将是calloc(),您可能不需要担心的可能性,但是为了让编译器满意并防止警告,您可能希望在继续取消引用指针之前ASSERT()指针不存在。NULL

如果你想编写完美健壮的代码,那么你需要添加代码,让你的函数在calloc()返回时优雅地失败NULL

于 2020-03-15T16:58:16.433 回答