Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Работа с динамической памятью (массив символов)


Автор: ioManip 23.2.2013, 03:54
Добрый день!

Ни как не могу понять, чего хочет от меня компилятор:
Код

main.cpp:9: error: expected primary-expression before '{' token
main.cpp:9: error: expected `;' before '{' token


Код

 const int size_n = 6,
             size_m = 11;
   
    char **chars = new char *[size_n];
    for( int i = 0; i < size_n; i++)
         chars[i] = new char [size_m];
  
    chars[size_n][size_m] =
   {
        { '#', '#', '#', '.', '.', '.', '?', '?', '.', '+', '.' },
        { '#', '#', '#', '.', '=', '.', '?', '?', '.', '+', '.' },
        { '#', '#', '#', '.', '.', '.', '.', '.', '.', '+', '.' },
        { '.', '.', '.', '.', '.', '.', '.', '.', '.', '=', '=' },
        { '.', '.', '.', '.', '.', '.', '.', '.', '.', '=', '=' },
        { '.', '.', '.', '.', '.', '.', '#', '#', '#', '=', '=' }
   };
   
 
  for( int i = 0; i < size_n; i++ )
    {
      for( int j = 0; j < size_m; j++ )
        {
          cout << chars[i][j];
        }
        cout << endl;
    }
   

  for( int i = 0; i < size_n; i++)
       delete [] chars[i];
       delete [] chars;

Автор: feodorv 23.2.2013, 05:26
Цитата(ioManip @  23.2.2013,  04:54 Найти цитируемый пост)
Ни как не могу понять, чего хочет от меня компилятор:

Какой Вы хитрый))) Так инициализация chars не пройдет. chars задана как char**, поэтому 
Цитата(ioManip @  23.2.2013,  04:54 Найти цитируемый пост)
    chars[size_n][size_m] =

есть присвоение одного элемента (причём за пределами выделенной памяти), а не инициализация всей матрицы. 


Тут либо
Код

   char chars[size_n][size_m] =
   {
        { '#', '#', '#', '.', '.', '.', '?', '?', '.', '+', '.' },
        { '#', '#', '#', '.', '=', '.', '?', '?', '.', '+', '.' },
        { '#', '#', '#', '.', '.', '.', '.', '.', '.', '+', '.' },
        { '.', '.', '.', '.', '.', '.', '.', '.', '.', '=', '=' },
        { '.', '.', '.', '.', '.', '.', '.', '.', '.', '=', '=' },
        { '.', '.', '.', '.', '.', '.', '#', '#', '#', '=', '=' }
   };

но тогда без явного выделения памяти под массив, либо
Код

    char **chars = new char *[size_n];
    for( int i = 0; i < size_n; i++)
         chars[i] = new char [size_m];
  
   char ichars[size_n][size_m] =
   {
        { '#', '#', '#', '.', '.', '.', '?', '?', '.', '+', '.' },
        { '#', '#', '#', '.', '=', '.', '?', '?', '.', '+', '.' },
        { '#', '#', '#', '.', '.', '.', '.', '.', '.', '+', '.' },
        { '.', '.', '.', '.', '.', '.', '.', '.', '.', '=', '=' },
        { '.', '.', '.', '.', '.', '.', '.', '.', '.', '=', '=' },
        { '.', '.', '.', '.', '.', '.', '#', '#', '#', '=', '=' }
   };

  for( int i = 0; i < size_n; i++ )
     for( int j = 0; j < size_m; j++ )
        chars[i][j] = ichars[i][j];

В любом случае, значения size_n и size_m должны оставаться 6 и 11, иначе испортится инициализация массива. То есть для случая 6x11 матрица правильно проинициализируется, для других значений - уже неправильно, а то и не скомпилируется вовсе (если задать меньшие размеры).

Автор: bsa 23.2.2013, 08:28
feodorv, только зачем int?

Автор: ioManip 23.2.2013, 12:06
Цитата(bsa @ 23.2.2013,  08:28)
feodorv, только зачем int?

И правда? Может быть, fedorev, Вы опечатались? 

Автор: feodorv 23.2.2013, 14:42
Цитата(ioManip @  23.2.2013,  13:06 Найти цитируемый пост)
И правда? Может быть, fedorev, Вы опечатались?  

Скорее одумался))) Конечно, char.

Автор: ioManip 24.2.2013, 04:23
Спасибо!  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)