На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Заполнение динамического двумерного массива
    Необходимо создать и заполнить двумерный массив, динамический.
    Делаю так:
    ExpandedWrap disabled
      #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".
    чувствую что я где-то с указателями запутался, но не могу понять где. подскажите плз.

    пробовал делать так:
    ExpandedWrap disabled
      arrptr[j][i] = 2;

    компилится, но когда доходит до заполнения выбивает "Unhandled exception at 0x001414f4 in dynamic_arrays.exe: 0xC0000005: Access violation writing location 0x00000000." вроде как я где-то за пределы выделенной памяти вылажу, да вот не могу понять где я напутал
      calloc? Давно этой функции не видел, очень давно...
      Здесь
      ExpandedWrap disabled
            arrptr = (int **) calloc(size, sizeof (int *));
            for (i = 0; i < size; i++)
                arrptr = (int *) calloc(size, sizeof (int)); //Кхе кхе(?!)

      судя по всему и происходит фигня. В плюсах обычно юзается operator new для выделения памяти. Кроме того, не забываем снова освобождать.
      Так
      ExpandedWrap disabled
        arrptr[i][j] = чтото;

      должно быть правильно. Или(скобки не там поставил):
      ExpandedWrap disabled
                       *(*(arrptr + i) + j) = 2;

      Хотя я бы так не делал.

      Добавлено
      Цитата DVG @
      но не могу понять где.

      Ну так компилятор же говорит
      Цитата
      left operand must be l-value
      , которым он явно не является(сумма и прочие арифм действия, кроме всего остального)
      Сообщение отредактировано: pan2004 -
        Цитата DVG @
        ExpandedWrap disabled
          for (i = 0; i < size; i++)
            arrptr[i] = (int *) calloc(size, sizeof (int)); // чувствуешь разницу?
          Цитата pan2004 @
          В плюсах обычно юзается operator new для выделения памяти.

          в том то и дело что мне надо на чистом С.

          volvo877спасибо, здесь то у меня собака и порылась :) знаю ведь как правильно и просто незаметил. вот так всегда, какую-то ошибку элементарную сделаю и бьюсь потом над ней, ищу везде но только не там где она на самом деле.
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0263 ]   [ 15 queries used ]   [ Generated: 18.05.24, 09:39 GMT ]