c - C 中的线性间隔数组

标签 c pointers linspace

我正在尝试在 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/

相关文章:

python - np.linspace 和 np.arange 有什么区别?

c - StrCat 不适用于单字符字符串 - C

C - 架构独立函数调用插入

c - 如何使用 Windows 套接字读取 TCP 窗口大小?

c - void f(char const * const p) 中的第二个 const 重要吗?

c++ - 从 C++ 中的链表中删除一个元素

python - 为每个索引制作一个具有不同颜色的颜色网格

CUDA - 添加数组元素并将结果分配给另一个数组元素时执行缓慢且错误

pointers - 带有忽略输出的 golang nil 指针赋值 - (*)(nil)