Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: malloc в MS VC  (Прочитано 6090 раз)
0 Пользователей и 1 Гость смотрят эту тему.
uis99
Гость
« : 02-04-2005 08:07 » 

выделение памяти под двумерные массивы в ТС выглядит так:

int **ar;
*ar=(int*)malloc(n*sizeof(int));
ar=(int**)malloc(n*sizeof(*ar));

в MS VC это даёт ошибку, как надо делать??

Юра
Записан
Migmile
Помогающий

ru
Offline Offline

« Ответ #1 : 02-04-2005 09:02 » 

Переставь строки Улыбаюсь
int **ar; - неинициализированный указатель на указатель (или массив указателей) - пока НИКУДА не указывает.
переменная ar должна содержать адрес ячейки памяти, где содержится дрегой указатель, или первый элемент массива указателей, но пока содержит мусор!
Поэтому надо сначала выделить память под этот массив указателей
malloc(n*sizeof(*ar)),
 присвоить адрес ее начала (адрес первого элемента в массиве) указателю ar с преобразованием типа
ar=(int**)malloc(n*sizeof(*ar));
и только потом уже выделять память для каждого элемента полученного массива
*ar=(int*)malloc(n*sizeof(int));  - этот оператор выделяет память ТОЛЬКО под первый столбец (или строку Улыбаюсь)
на самом деле надо выделить память и под другие эдементы
for (int i=0;i<n;i++)
{
 ar=(int*)malloc(n*sizeof(int));
}
кстати, можно записать и в эквивалентной форме  *(ar+i)=(int*)malloc(n*sizeof(int));

И последнее, не забудь освободить память В ОБРАТНОМ ПОРЯДКЕ!
for (int i=0;i<n;i++)
{
 free(*(ar+i));
}
 free(ar);



Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines