Я написал программу c, которая считывает числа квадратных матриц и сохраняет их в 2d динамическом массиве, чтобы впоследствии найти некоторые определенные точки. Теперь все прошло нормально, пока я не получил задачу переместить все сохраненные числа в новый 1d динамический массив. В этот момент программа вылетает при попытке доступа к функции, которая выделяет память нового массива и перемещает числа к ней. Поскольку я новичок не только для c, но и для программирования в целом, любая обратная связь будет оценена по достоинству.c сбой программы при доступе к функции, которая выделяет память
теперь это функция, которая должна выделить память нового массива
void perkelimas(int ***matrica, int *n, int **matrica2)
{
int naujas_dydis = (*n)*(*n);
printf("%i dydis \n", naujas_dydis);
*matrica2 = malloc(naujas_dydis*sizeof(int));
int w;
int b = 0;
int c = 0;
for(w = 0; w < naujas_dydis; w++)
{
printf("%i \n", w);
printf("b = %i, c = %i \n", b, c);
if(c < *n)
{
*matrica2[w] = *matrica[b][c];
printf("%i \n", *matrica2[w]);
c++;
}
if (c == *n)
{
c = 0;
b++;
}
}
}
и здесь является основной функцией
int main()
{
int *n;
int i,j;
int **matrica;
int *matrica2 = NULL;
atmintis(&matrica, n);
i = 0;
j = 0;
int k = 0;
while(i < *n)
{
while(j < *n)
{
printf("iveskite tasko dydi: \n"); // this is where user inputs matrix numbers
scanf("%i", &matrica[i][j]);
j++;
}
i++;
j = 0;
}
i = 0;
j = 0;
int m = 0;
int l = 0;
printf("matrica: \n");
while (l < *n)
{
while (m < *n)
{
printf("%i", matrica[l][m]);
printf(" ");
m++;
}
printf("\n");
m = 0;
l++;
}
printf("\n");
printf("balno tasku koordinates: \n");
while (i < *n)
{
while (j < *n)
{
int x,y;
x = j+1;
y = i+1;
if(tikrinimas(i, j, *n, matrica) == 1)
{
printf("%i", x);
printf(" ");
printf("%i", y);
printf("\n");
}
j++;
}
j = 0;
i++;
}
perkelimas(matrica, n, matrica2);
for(i = 0; i < *n; i++)
{
free(matrica[i]);
}
return 0;
}
и здесь функция, которая выделяет память 2d-массива
void atmintis(int ***matrica, int *n)
{
printf("Iveskite matricos ilgi ir ploti: ");
scanf("%i", &(*n)); // length and width of matrix
int q;
(*matrica) = (int**)malloc((*n)*sizeof(int));
for (q = 0 ; q < *n ; q++)
{
(*matrica)[q] = (int*)malloc((*n)*sizeof(int));
}
}
спасибо за любую помощь заранее
'(int **) malloc ((* n) * sizeof (int));' должно быть '(int **) malloc ((* n) * sizeof (int *));'. Это было бы очень важно в 64-битных машинах, где оба размера различны. Не так в 32-битных системах. – rodrigo
Что с чрезмерным использованием указателей? Вы просто настраиваете себя на неприятности. Почему 'n' в' main() 'даже указатель? Это даже не инициализировано. –
Вы пробовали использовать отладчик? Что такое трассировка стека при сбое программы? – b4hand