gpt4 book ai didi

c - malloc 二维数组时出现问题

转载 作者:行者123 更新时间:2023-12-02 08:55:56 31 4
gpt4 key购买 nike

我对 C、malloc 和所有这些爵士乐还很陌生,所以我决定写这篇文章来学习更多技能。我的想法是,我从文件中读取一堆整数并将它们放入矩阵(二维数组)中。文件的开头说明有多少行和列,因此它读取这些数字并使用 malloc 来设置二维数组。

int read_matrix(FILE *mat, int ***Z, int *x, int *y) 
{
int i = 0;
int x_temp = 0;
int y_temp = 0;

if (fscanf(mat, "%d %d", &(*x), &(*y)) == EOF){
printf("File is not big enough to contain a matrix\n");
return -1;
}

printf("About to malloc %d\n", *x);

*Z = (int**) malloc(*x * sizeof(int*));
while (i < *x) {
printf("mallocing %d\n", i);
*Z[i] = (int*) malloc(*y * sizeof(int));
printf("malloced\n");
++i;
}

printf("Malloc complete\n");

/*Other unimportant code*/
}

输出内容为:

About to malloc 3 
mallocing 0
malloced
mallocing 1
Segmentation fault

所以它除了Z中的一个int**之外没有分配任何东西..我认为?

我对 C 很陌生,所以我不确定我是否犯了一些小错误,或者我是否真的错误地处理了整个事情。有什么想法吗?谢谢!

最佳答案

[] 运算符比一元 * 运算符绑定(bind)更紧密。尝试将 *Z[i] 更改为 (*Z)[i] 并查看您的代码是否正常运行。

作为旁注,在 C 中,为矩阵分配 (sizex*sizey) 大小的单个数组,然后将其索引为 arr[x*sizey + y] 或 arr[y*sizex + X]。这更接近地模仿了语言对静态数组的处理(例如,如果您声明 int foo[10][10],则所有 100 个 int 在内存中都是连续的,并且没有 10 个 int* 的列表已存储。

关于c - malloc 二维数组时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4881807/

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