gpt4 book ai didi

c - 了解malloc的不同方法

转载 作者:行者123 更新时间:2023-11-30 20:51:17 24 4
gpt4 key购买 nike

请有人向我解释一下以下两个 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));
}

谢谢。

最佳答案

第二个是错误的,因为您正在为 int 分配空间。 s 而不是指针,在 64 位系统上(sizeof(int) < sizeof(void *) ),它将导致未定义的行为,因为代码将访问超出使用 malloc() 分配的内存。 .

也许你看到的是

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

它分配一个连续整数的n×n矩阵”,但是您不能使用两个索引表示法访问它。

关于c - 了解malloc的不同方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404216/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com