二维数组内存动态分配有关问题

二维数组内存动态分配问题
本帖最后由 gaohuaid 于 2013-08-28 22:43:28 编辑
在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++) {