二维数组内存动态分配有关问题
二维数组内存动态分配问题
在C语言中通过给指向指针的指针动态分配内存,然后把它当成一个二维数组使用。代码如下:
此时我认为可以把array看成是4行4列的二维数组,但这样的代码也是正确的:
可以看到当j<10时照样可以给array赋值,且能正确输出,此时明显array变成了10行10列,
而之前分配内存是只分配了4行4列的空间,求解这是该怎么破?
------解决方案--------------------
猜想: 那是因为你的越界不足够破坏它底层的栈空间的!
如果你再加大了,就会出现内存出错的问题的!
如果这样的话呢?
等下面更好的解释
------解决方案--------------------
仅供参考
在C语言中通过给指向指针的指针动态分配内存,然后把它当成一个二维数组使用。代码如下:
int main()
{
int i, j, **array;
array = (int **)malloc(4 * sizeof(int*));
for(i = 0; i < 4; i++)
{
*(array + i)=(int *)malloc(4 * sizeof(int));
}
for(i = 0 ; i < 4; i++)
{
for(j = 0; j < 4; j++)
array[i][j] = i + j;
}
}
此时我认为可以把array看成是4行4列的二维数组,但这样的代码也是正确的:
初始化代码和前面一段相同
for(i = 0 ; i < 4; i++)
{
for(j = 0; j < 10; j++)
array[i][j] = i + j;
}
可以看到当j<10时照样可以给array赋值,且能正确输出,此时明显array变成了10行10列,
而之前分配内存是只分配了4行4列的空间,求解这是该怎么破?
c
二维数组
malloc
------解决方案--------------------
猜想: 那是因为你的越界不足够破坏它底层的栈空间的!
如果你再加大了,就会出现内存出错的问题的!
如果这样的话呢?
for(i = 0 ; i < 10; i++)
{
for(j = 0; j < 10; j++)
array[i][j] = i + j;
}
等下面更好的解释
------解决方案--------------------
仅供参考
//在堆中开辟一个4×5的二维int数组
#include <stdio.h>
#include <malloc.h>
int **p;
int i,j;
void main() {
p=(int **)malloc(4*sizeof(int *));
if (NULL==p) return;
for (i=0;i<4;i++) {
p[i]=(int *)malloc(5*sizeof(int));
if (NULL==p[i]) return;
}
for (i=0;i<4;i++) {
for (j=0;j<5;j++) {