gpt4 book ai didi

c - 当我尝试使用函数中通过引用传递的预分配矩阵读取值时出现段错误

转载 作者:行者123 更新时间:2023-11-30 16:18:31 25 4
gpt4 key购买 nike

该函数有两个参数:一个字符指针和一个整数三重指针。整数三重指针用于通过引用传递整数双指针(以便分配矩阵)。

我已经调试完毕,一切顺利,直到 for 循环的第二次迭代用于从文件中获取数字。

void leggimatrice(char *filename, int ***mat)
{
int counter = 0, i, j, ap;
FILE *fp;

//count how many numbers there are in the file
if ((fp = fopen(filename, "r")) != NULL) {
while (fscanf(fp, "%d", &i) != EOF)
counter++;
fclose(fp);
}
//allocate the matrix; the value of counter is 9
*mat = malloc(sizeof(int *) * sqrt(counter))
for (i = 0; i < sqrt(counter); i++) {
(*mat)[i] = (int *) malloc(sizeof(int) * sqrt(counter));
}

//reopen the file and save the values in the allocated matrix
fp = fopen("matrice.txt", "r");
for (i = 0; i < sqrt(counter); i++) {
for (j = 0; j < sqrt(counter); j++)
fscanf(fp, "%d", (mat[i])[j]);
}
fclose(fp);

return;
}

结果是在第一个 for 循环的第二次迭代期间出现段错误 (i=1)

最佳答案

if ((fp = fopen(filename, "r")) != NULL) {
...
fp = fopen("matrice.txt", "r");

这些不一定会打开同一个文件,因此(除非filename == "matrice.txt")您可能会计算和读取不同的文件。

SIGSEGV的真正原因在这里:

fscanf(fp, "%d", (mat[i])[j]);

应该是:

fscanf(fp, "%d", &(*mat)[i][j]);

或等效的:

fscanf(fp, "%d", (*mat)[i] + j);

关于c - 当我尝试使用函数中通过引用传递的预分配矩阵读取值时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55883525/

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