Umer Farooq Ответов: 3

Как инициализировать массив 2d - объектов strucuture.


но когда я обращаюсь к атрибутам структуры, я получаю исключение, код, который я использовал, находится ниже

Что я уже пробовал:

у меня есть имя структуры "Гитара", код, который используется для создания 2-D массива гитарных объектов
Guitar ** guitarlists = (Guitar **)malloc(sizeof(Guitar *));
 for (int i = 0; i < row; i++)
 {
     guitarlists[i] = (Guitar *)malloc(sizeof(Guitar));
 }

3 Ответов

Рейтинг:
2

CPallini

Цитата:
Гитара ** guitarlists = (на гитаре **)Танос(оператор sizeof(гитара *));

Так и должно быть
Guitar ** guitarlists = (Guitar **)malloc(row * sizeof(Guitar *));


[обновление]
Как Таддеус Джонс правильно указал, Если вам нужен двумерный массив Guitar затем вы должны изменить
Цитата:
guitarlists[i] = (Guitar *)malloc(sizeof(Guitar));
также.
[/обновление]


Пожалуйста, обратите внимание: так как вы, по-видимому, используете C++- а почему бы тебе не воспользоваться им? C++ язык программирования и стандартные библиотечные функции (например, контейнеры)?


Рейтинг:
2

KarstenK

В C++ стандартно использовать операторы new и delete типа "new".:

Guitar *guitarlists = new Guitar[row];//normal array
delete guitarlists; 
Или я что-то упустил?


Рейтинг:
17

User 7429338

Если вам нужен 2D массив из Р строки и с колонны, вы можете сделать это:

Guitar ** guitarlists = (Guitar **)malloc(r* sizeof(Guitar *));
for (int i = 0; i < r; i++)
{
	guitarlists[i] = (Guitar *)malloc(c * sizeof(Guitar));
}


CPallini

Черт, я должен обновить свое решение. :-)
5.