Я работал с 2D-массивами и пытался передать его из одной функции в другую. Я видел все ответы здесь относительно этого, и никто из них, кажется, не ответил на этот конкретный тип проблемы. Его простая вещь, которую я пытаюсь достичь, но ответ странный.указатель на неточности указателя
Вот основной():
int main(void)
{
int i=0,j=0,n=0,n2=0;
double **a, **a1, b=0;
printf("Enter 'n2' :");
scanf("%d", &n2);
a= makearray(n2);
for(i=0; i < n2; i++){
for(j=0; j < n2; j++){
a[i][j] = j;
printf("%.f ",a[i][j]);
}
printf("\n");
}
printf("\n\n\n");
for(i=0; i < n2; i++){ // print a
for(j=0; j < n2; j++){
b = a[i][j];
printf("%.f ", b);
}
printf("\n");
}
printf("\n\n\n");
return 0;
}
Функция makearray() просто возвращает указатель на указатель для 2D массив размера, переданного в качестве аргумента.
makearray() является:
double** makearray(int n2)
{
int i=0;
double** a;
a = malloc(n2 * sizeof(int *));
if(a == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
for(i = 0; i < n2; i++){
a[i] = malloc(n2 * sizeof(int));
if(a[i] == NULL){
fprintf(stderr, "out of memory\n");
exit(0);
}
}
return a;
}
Вы можете ввести 'п2', где (п2 х п2) становится размер матрицы, и с п = 9, выход:
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 6 7 8
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 0 1 2
0 1 2 3 4 5 6 7 8
Я никоим образом не изменил первый массив, просто напечатал его снова, любые идеи, почему эти два разные?
когда вы 'выход (0)' не 'free' массив, вероятно, OS будет, но я не думаю, что это хорошая практика, чтобы сделать это. –
'sizeof (int *)', 'sizeof (int)' at 'makearray':' int' -> 'double' – BLUEPIXY
Я заметил, что вы никогда не называете' free', вы должны. А также, когда у вас есть такая проблема, вы должны использовать отладчик, это сэкономит вам массу проблем. –