【发布时间】:2021-06-09 20:51:54
【问题描述】:
相当简单的内存分配,但我无法理解。
有什么区别:
int **ans = (int**)malloc(sizeof(int*[numRows]));
和
int **ans = (int**)malloc(sizeof(int)*numRows);
我使用第二个版本得到堆缓冲区溢出,但这里的实际区别是什么? 我尝试分配 x 数量的内存块类型 int。 区别是
sizeof(int) * numRows
对
sizeof(int * [numRows])
【问题讨论】:
-
演员
(int**)是不必要的。 -
sizeof(int)*numRows)的大小为numRowints。sizeof(int*[numRows])是指向int的指针数组的大小。完全不同的东西 -
是的,我就是这么想的。这两个语句不等价。
-
你试图分配一个指针数组,所以基本类型是
int *而不是int。因此,第二个应该是sizeof(int *) * numRows。 -
为了避免这种情况,如何:
int **ans = malloc(sizeof(*ans) * numRows);?
标签: c malloc dynamic-memory-allocation