了解malloc的差异方法

时间:2015-10-29 00:56:43

标签: c

请注意,有人可以向我解释以下两个n*n Matrix声明之间的区别。

int **Matrix;    
Matrix = malloc(n * sizeof(int *));
    for (i = 0; i < n; i++)
    {
        Matrix[i] = malloc(n * sizeof(int));
    }

Matrix = malloc(n * sizeof(int)); // without pointer
for (i = 0; i < n; i++)
{
    Matrix[i] = malloc(n * sizeof(int));
}

谢谢。

1 个答案:

答案 0 :(得分:3)

第二个是错误的,因为你在64位系统(或其中int )为sizeof(int) < sizeof(void *)而不是指针分配空间会导致未定义的行为因为代码将访问超出malloc()分配的内存。

也许你看到的是

int *matrix;
matrix = malloc(n * n * sizeof(*matrix));
if (matrix == NULL)
    abort_malloc_failed();

分配contiguos整数的 n × n 矩阵”,但是不能用两种索引表示法来访问它。