我正在尝试在 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
显然,我确定这只是一个菜鸟错误,但我不确定如何对其进行排序!
谢谢。
最佳答案
以下消息:
Warning C6011 Dereferencing NULL pointer 'x'. Line 14
不是运行时错误。这是 Microsoft C++ 编译器发出的措辞非常糟糕的警告(请参阅 https://learn.microsoft.com/en-us/cpp/code-quality/c6011?view=vs-2019 ),关于可能您可能会取消引用一个指针,该指针在运行时可能为NULL
。
如果calloc()
无法分配内存,您的指针将为NULL
,您可能不需要担心这种可能性,但为了让编译器满意并且为了防止出现警告,您可能需要在继续取消引用指针之前 ASSERT()
指针不为 NULL
。
如果您想编写完美健壮的代码,那么您需要添加代码,以便在 calloc()
返回 NULL
时使您的函数优雅地失败。
关于c - C 中的线性间隔数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60695284/