Я кодировал свой университет, где мы работаем с матрицами, и я не могу найти ошибку в коде, который меняет значение переменной, где я сохраняю столбцов матрицы. Я пробовал отлаживать его и не могу найти его, он просто заканчивает функцию, в которой я выделяю память из матрицы, и вводит следующую функцию (которая получает значения от клавиатуры для заполнения матрицы) неправильным значением столбца. Код следующий:Изменение значения переменной после возврата из функции в C
#include <stdio.h>
#include <stdlib.h>
#define DEBUG 1
void allocate (int ***mat,int n,int m){
int i;
*mat = (int **) malloc (n*sizeof(int*));
for (i=0; i<n; i++){
mat[i] = (int *) malloc (m*sizeof(int));
}
#if DEBUG
printf ("allocate n: %d m: %d\n",n,m);
#endif // DEBUG
}
void initialize (int **mat, int n, int m){
int i,j;
#if DEBUG
printf ("initialize n: %d m: %d\n",n,m);
#endif // DEBUG
for (i=0; i<n; i++){
for (j=0; j<m; j++){
printf ("Enter value for position [%d][%d]: ",i,j);
scanf ("%d",&(mat[i][j]));
}
}
}
int main()
{
int n=2;
int m=3;
int **mat=NULL;
#if DEBUG
printf ("before allocate n: %d m: %d\n",n,m);
#endif // DEBUG
allocate (&mat,n,m);
#if DEBUG
printf ("after allocate n: %d m: %d\n",n,m);
#endif // DEBUG
initialize (mat,n,m);
return 0;
}
Так что, если вы запустите это с DEBUG набор 1, вы получите значения п и т (которые мои строки и столбцы). Я использую кодовые блоки. Спасибо за ваше время!
Можете ли вы предоставить образец вывода? – mastov
Почтовый код, который фактически компилируется. Исправьте предупреждения. – ooga
Вам нужно изменить выделение на '(* mat) [i] = (int *) malloc (m * sizeof (int));' – ooga