c - malloc 时表达式必须是可修改的左值

标签 c malloc

我知道这个问题之前已经被问过,但我无法完全缩小我在这里做错的范围

int* arr[2];
arr = (int (*)[2]) malloc(sizeof(int) * size);

为什么 Visual Studio 告诉我表达式必须是可修改的左值?我正在尝试创建一个具有恒定列大小的数组,因为它始终是两个,但行会有所不同。

最佳答案

arr 是一个指针数组。一旦初始化,您就无法为其分配任何内容。由于您试图将其值设置为调用 malloc 的返回值,因此您可能希望它是一个指向数组的指针。在这种情况下,请使用:

int (*arr)[2];

此外,不要转换 malloc 的返回值。请参阅Do I cast the result of malloc? .

使用

int (*arr)[2];
arr = malloc(sizeof(*arr) * size);
          // ^^^^^^^^^^^^ We are speculating this is what you need,
          //              not sizeof(int)

如果您希望 arr 指向 15 x 2 对象的数组,则需要使用:

arr = malloc(sizeof(*arr) * 15);

关于c - malloc 时表达式必须是可修改的左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35165077/

相关文章:

c - c中的获取和malloc

c++ - 规避类的构造函数是合法的还是会导致未定义的行为?

c - 我什么时候释放变量decodeSet1?

c - C 中的 Malloc 内存损坏

C printf有点奇怪,打印完全是废话

捕捉 WM_DEVICECHANGE

c - 将值存储为 C 中 if 语句中的字符串

c - 如何使用省略号 (...)

c - 如何在 C 中将这些 ASCII 值转换为二进制

c - 使用 GLib 集合删除列表中的重复项