Это упрощенная версия моего кода. У меня проблема с выводом. Как я могу это исправить? - PullRequest
0 голосов
/ 08 мая 2020
int* row;
row = (int*)(malloc)(5 * sizeof(int));
int **s1;
s1=(int**)(malloc)(2*sizeof(row)); 

row[0] = 1;
row[1] = 2;
row[2] = 1;
row[3] = 2;
row[4] = 1;
s1[0] = row;

row[0] = 3;
row[1] = 3;
row[2] = 3;
row[3] = 4;
row[4] = 3;
s1[1] = row;

for (int i = 0; i < 5; i++) printf("%d", s1[0][i]);
printf("\n");
for (int i = 0; i < 5; i++) printf("%d", s1[1][i]);

мой вывод:

33343

33343

но я хочу увидеть

12121

33343

в качестве вывода. Кроме того, я не хочу использовать распределение stati c.

1 Ответ

3 голосов
/ 08 мая 2020

Оба указателя (элемента) динамически выделяемого массива указателей указывают на одну и ту же строку объекта после присваивания

s1[0] = row;
//...
s1[1] = row;

Итак, что хранится в текущий момент в массиве, на который указывает строка указателя указывает на эти два указателя s1 [0] и s1 [1].

Вам нужно установить указатель s1 [1] на какой-то другой массив.

...