在mallocing时,表达式必须是可修改的左值

时间:2016-02-02 22:31:43

标签: c malloc

我之前已经问过这个问题,但是我不能完全理解我在这里做错了什么

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

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

3 个答案:

答案 0 :(得分:2)

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);

答案 1 :(得分:0)

你有一个指针数组....该数组不能用作指针本身,只有数组条目是指针。

你需要一个指向指针的指针int **,除非你想要一个整数数组,那么你只需int* arr

答案 2 :(得分:0)

您考虑使用结构吗?然后语法更直接。

Class.forName("com.mysql.jdbc.Driver").newInstance();