C 将值从文件加载到2D数组指针的值
如何正确地将值从文件加载到另一个函数中的矩阵C 将值从文件加载到2D数组指针的值,c,multidimensional-array,malloc,C,Multidimensional Array,Malloc,如何正确地将值从文件加载到另一个函数中的矩阵 void someFunction(int ***matrix, n, m) { int c, d; FILE *fp = fopen("some.txt", "r"); // načtení souboru for (c = 0; c < m; c++) { for (d = 0; d < n; d++) { fscanf(fp, "%i", &matrix[c][
void someFunction(int ***matrix, n, m) {
int c, d;
FILE *fp = fopen("some.txt", "r"); // načtení souboru
for (c = 0; c < m; c++) {
for (d = 0; d < n; d++) {
fscanf(fp, "%i", &matrix[c][d]); //4th read throws error
}
}
}
int main() {
int i;
int **matrix;
int n = 3; // columns
int m = 2; // rows
first = (int **)malloc(n * sizeof(int*));
for (i = 0; i < n; i++)
first[i] = (int *)malloc(m * sizeof(int));
someFunction(&matrix, n, m);
free(matrix);
for (i = 0; i < n; i++)
free(first[i]);
}
void someFunction(int***矩阵,n,m){
int c,d;
FILE*fp=fopen(“some.txt”,“r”);//načtenísouboru
对于(c=0;c
fscanf(fp、%i、&matice[c][d])
对吗
它在
[1][0]
处失败(内存错误),但[0][0]、[0][1]、[0][2]
工作正常。我不确定我做错了什么。您有一个指针数组,每个元素都被设置为指向一个动态分配的块。这不是一个二维数组,尽管您可以通过与二维数组相同的语法索引到整个数据结构中
您至少有两个问题:
0
运行到n-1
,指向数组的索引从0
运行到m-1
。如果n
和m
不同,则在读取循环中反转该值,从而超出至少一个数组的界限fscanf()
的存储指针错误。在someFunction()
中,变量matrix
的类型为int***
,并且您传递int**的地址。因此,索引[c
][d
]处的元素是(*矩阵)[c][d]
,该元素的地址是&(*矩阵)[c][d]
,这与&矩阵[c][d]
完全不同,甚至与矩阵[c][d]
也不相同您有一个指针数组,每个元素都被设置为指向一个动态分配的块。这不是一个二维数组,尽管您可以通过与二维数组相同的语法索引到整个数据结构中 您至少有两个问题:
0
运行到n-1
,指向数组的索引从0
运行到m-1
。如果n
和m
不同,则在读取循环中反转该值,从而超出至少一个数组的界限fscanf()
的存储指针错误。在someFunction()
中,变量matrix
的类型为int***
,并且您传递int**的地址。因此,索引[c
][d
]处的元素是(*矩阵)[c][d]
,该元素的地址是&(*矩阵)[c][d]
,这与&矩阵[c][d]
完全不同,甚至与矩阵[c][d]
也不相同void someFunction(int **matrix, int n, int m) {
int c, d;
FILE *fp = fopen("some.txt", "r");
for (c = 0; c < n; c++) {
for (d = 0; d < m; d++) {
fscanf(fp, "%i", &matrix[c][d]);
}
}
fclose(fp);
}
int main(void) {
int i;
int **matrix;
int n = 3; // rows
int m = 2; // columns
matrix = (int **)malloc(n * sizeof(int*));
for (i = 0; i < n; i++)
matrix[i] = (int *)malloc(m * sizeof(int));
someFunction(matrix, n, m);
for (i = 0; i < n; i++)
free(matrix[i]);
free(matrix);
}
void someFunction(int**matrix,int n,int m){
int c,d;
FILE*fp=fopen(“some.txt”、“r”);
对于(c=0;c
试试这个
void someFunction(int **matrix, int n, int m) {
int c, d;
FILE *fp = fopen("some.txt", "r");
for (c = 0; c < n; c++) {
for (d = 0; d < m; d++) {
fscanf(fp, "%i", &matrix[c][d]);
}
}
fclose(fp);
}
int main(void) {
int i;
int **matrix;
int n = 3; // rows
int m = 2; // columns
matrix = (int **)malloc(n * sizeof(int*));
for (i = 0; i < n; i++)
matrix[i] = (int *)malloc(m * sizeof(int));
someFunction(matrix, n, m);
for (i = 0; i < n; i++)
free(matrix[i]);
free(matrix);
}
void someFunction(int**matrix,int n,int m){
int c,d;
FILE*fp=fopen(“some.txt”、“r”);
对于(c=0;c
它应该是:
void someFunction(int **matrix, n, m)
// ^^^^
你的星星太多了。因此,您试图扫描指针,而不是扫描int,从而导致内存损坏
调用将是someFunction(first,n,m)代码>
不清楚矩阵在main()
中的作用是什么-扔掉它(当然也不要释放它,因为你从未在任何地方指出它)。它应该是:
void someFunction(int **matrix, n, m)
// ^^^^
你的星星太多了。因此,您试图扫描指针,而不是扫描int,从而导致内存损坏
调用将是someFunction(first,n,m)代码>
不清楚main()
中的matrix
是做什么的-扔掉它(当然不要释放它,因为你从来没有指出它的意义)。什么是matice
?你是说矩阵?@johnbollinger是的,对不起,是我的错,打错了。现在修订了。什么是matice
?你是说矩阵?@johnbollinger是的,对不起,是我的错,打错了。现在修订了。我的疏忽,谢谢你。这正是我需要知道的!非常感谢。1.我的疏忽,谢谢你。这正是我需要知道的!非常感谢。我是这样做的,但它在“free(first[1])”时中断:(@Lucfia在你的情况下,这是执行free(matrix);
的一个不好的理由。first
是拼写错误,因为matrix
:我是这样做的,但在“free(first[1])”时中断:(@Lucfia在你的情况下,这是执行free(matrix)的一个不好的理由)前面。先<