请注意,有人可以向我解释以下两个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));
}
谢谢。
答案 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 “矩阵”,但是不能用两种索引表示法来访问它。