Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Деструктор

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Деструктор
Имя
Сообщение << Старые топики   Новые топики >>
Деструктор - 2007-10-09 18:54:22.046666   
BW07

Сообщений: 43
Оценки: 0
Присоединился: 2007-09-22 18:29:37.170000
Вот тут пытаюсь изучить С++
но вот встретился с проблеммой

при вызове delete[] str;
где str динамически выделенная строка
прога вылетает.

язык программирования Microsoft Visual C++ 6.0
Также пробовал и на Visual Studio 2008 Beta 2 Standard Edition
но таже ошибка(пасибо ][ за студию).

Возникает в дебаге, в релизе все тихо:-).

В чем я ошибаюсь help me плизззззззз:-(

#include <stdafx.h>
#include <iostream>
/*using namespace std;*/

class stroka
{
char* str;
public:
stroka();

~stroka(){delete[] str;};
};

int main()
{
stroka a;

return 0;
}


stroka::stroka()
{
str=new char[5];
str = "12345";
}
Post #: 1
RE: Деструктор - 2007-10-10 01:57:49.226666   
rgo

Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
quote:

str = "12345";

вдумайся в смысл этой фразы. подумай о том, что происходит с `new char[5]' после выполнения этой строчки. подумай о том, как char* реагирует на оператор `='.
просветление придёт.
Post #: 2
RE: Деструктор - 2007-10-10 11:11:38.373333   
Inspektor

Сообщений: 143
Оценки: 0
Присоединился: 2007-08-31 11:37:20.710000
    Ну во-первых это, конечно, убойный конструктор, на который указал rgo:
stroka::stroka() { &nbsp;&nbsp;&nbsp; str=new char[5]; &nbsp;&nbsp;&nbsp; str = "12345"; }     Тут сразу две ошибки:
1) при str="..", компилятор хочет повеситься:D. Не зря ведь придумали стандартные процедуры для работы со сторками(в начале со строками много мороки будет). В данном случае юзай strcpy(char*,const char*).
2) Ты пытаешься в массив из пяти(str=new char[5];) строк запихнуть пять символов! компилятору-то пох, но куда там теперь совать нулевой байт "\0"? Его просто нет, потому-то программа и вылетает при вызове HeapFree();
quote:

при вызове delete[] str;
где str динамически выделенная строка
прога вылетает.

    Читай заголовочные файлы! Тут проблема при освобождении фрагмента памяти.
    Рабочий код будет выглядить так:
#include &lt;iostream&gt; class stroka { &nbsp;&nbsp;&nbsp; char* str; &nbsp;&nbsp;&nbsp; public: &nbsp;&nbsp;&nbsp; stroka(); &nbsp;&nbsp;&nbsp; ~stroka() &nbsp;&nbsp;&nbsp; { &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; delete[] str; &nbsp;&nbsp;&nbsp; }; }; void main() { &nbsp;&nbsp;&nbsp; stroka a; &nbsp;&nbsp;&nbsp; return; } stroka::stroka() { &nbsp;&nbsp;&nbsp; str=new char[6]; &nbsp;&nbsp;&nbsp; strcpy(str,"12345"); }     И ещё один совет, пиши код в читабельном виде, если сейчас тут всего пара строк, то в больших функциях это будет очень усложнять работу.
Post #: 3
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Деструктор







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.