Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.15.143.207] |
|
Сообщ.
#1
,
|
|
|
Необходимо создать и заполнить двумерный массив, динамический.
Делаю так: #include <stdlib.h> #include <stdio.h> int fillarr (void) { int size; int i,j; int ** arrptr; printf("Enter size of array "); scanf("%d", &size); arrptr = (int **) calloc(size, sizeof (int *)); for (i = 0; i < size; i++) arrptr = (int *) calloc(size, sizeof (int)); for (i = 0; i < size; i++) for (j = 0; j < size; j++) *(*arrptr + i) + j = 2; //для примера заполним его двойками. и вот на этом месте я и застрял } так вот, массив вроде создается но не могу врубится как его заполнить. компилятор на том месте где комент выдает "left operand must be l-value". чувствую что я где-то с указателями запутался, но не могу понять где. подскажите плз. пробовал делать так: arrptr[j][i] = 2; компилится, но когда доходит до заполнения выбивает "Unhandled exception at 0x001414f4 in dynamic_arrays.exe: 0xC0000005: Access violation writing location 0x00000000." вроде как я где-то за пределы выделенной памяти вылажу, да вот не могу понять где я напутал |
Сообщ.
#2
,
|
|
|
calloc? Давно этой функции не видел, очень давно...
Здесь arrptr = (int **) calloc(size, sizeof (int *)); for (i = 0; i < size; i++) arrptr = (int *) calloc(size, sizeof (int)); //Кхе кхе(?!) судя по всему и происходит фигня. В плюсах обычно юзается operator new для выделения памяти. Кроме того, не забываем снова освобождать. Так arrptr[i][j] = чтото; должно быть правильно. Или(скобки не там поставил): *(*(arrptr + i) + j) = 2; Хотя я бы так не делал. Добавлено Цитата DVG @ но не могу понять где. Ну так компилятор же говорит Цитата , которым он явно не является(сумма и прочие арифм действия, кроме всего остального) left operand must be l-value |
Сообщ.
#3
,
|
|
|
Цитата DVG @ for (i = 0; i < size; i++) arrptr[i] = (int *) calloc(size, sizeof (int)); // чувствуешь разницу? |
Сообщ.
#4
,
|
|
|
Цитата pan2004 @ В плюсах обычно юзается operator new для выделения памяти. в том то и дело что мне надо на чистом С. volvo877спасибо, здесь то у меня собака и порылась знаю ведь как правильно и просто незаметил. вот так всегда, какую-то ошибку элементарную сделаю и бьюсь потом над ней, ищу везде но только не там где она на самом деле. |