Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.02.2008, 17:44   #1
alex87
Новичок
Джуниор
 
Регистрация: 28.02.2008
Сообщений: 1
По умолчанию new,delete

При выполнении программы на этапе delete p[i]
выскакивает Debug Error
Damage after normal block #xx at adres
тоесть программа при освобождении памяти выкидывает данный эксепшн.
В чём может быть дело??

Код:
#include <windows.h>


char*** alloc3darray(char*** p, int dim1, int dim2, int dim3);
char** alloc2darray(char** p, int dim1, int dim2);
void free3darray(char*** p, int dim1, int dim2);
void free2darray(char** p, int dim1);


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{

char** arch;

arch = alloc2darray(arch, 10, 10);

for(int i=0; i<10; i++)
  memset(arch[i], '1', strlen(arch[i]));

free2darray(arch, 10);

return 0;
}


char*** alloc3darray(char*** p, int dim1, int dim2, int dim3)
{
   for(int i=0; i<dim1; i++)
   {
     p[i] = new char*[dim2];

	 for(int j=0; j<dim2; j++)
	 {
	   p[i][j] = new char[dim3];
	 }
   }

   return p;
}

char** alloc2darray(char** p, int dim1, int dim2)
{
   p = new char*[dim1];

   for(int i=0; i<dim1; i++)
   {
	 p[i] = new char[dim2];
   }

   return p;
}

void free3darray(char*** p, int dim1, int dim2)
{
  for(int i=0; i<dim1; i++)
  {
    for(int j=0; j<dim2; j++)
    {
      delete p[i][j];
    }

    delete p[i];
  }

  delete p;
}

void free2darray(char** p, int dim1)
{
  for(int i=0; i<dim1; i++)
  {
    delete p[i];
  }

  delete p;
}
alex87 вне форума Ответить с цитированием
Старый 28.02.2008, 17:50   #2
Alek86
Форумчанин
 
Регистрация: 25.09.2007
Сообщений: 189
По умолчанию

ты делаешь
Код:
 p = new char*[dim1];
но
Код:
delete p;
а надо
Код:
delete[] p;
(так вроде пишется?)

кстати, если учишь С++ (не С), то лучше сразу пользуй stl и boost (что это - в гугле)
Alek86 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CTRL+ALT+DELETE terminadoor Помощь студентам 14 21.07.2008 16:22
клавиша delete andrey4623 Общие вопросы Delphi 6 17.01.2008 18:16
как отследить нажатие клавиши Delete D-fens Общие вопросы Delphi 4 07.06.2007 23:58
UPDATE и DELETE Дамир БД в Delphi 3 13.03.2007 01:44