Деструктор
Пользователи, просматривающие топик: 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"; }
|
|
|
RE: Деструктор - 2007-10-10 01:57:49.226666
|
|
|
rgo
Сообщений: 7170
Оценки: 281
Присоединился: 2004-09-25 05:14:25
|
quote:
str = "12345"; вдумайся в смысл этой фразы. подумай о том, что происходит с `new char[5]' после выполнения этой строчки. подумай о том, как char* реагирует на оператор `='. просветление придёт.
|
|
|
RE: Деструктор - 2007-10-10 11:11:38.373333
|
|
|
Inspektor
Сообщений: 143
Оценки: 0
Присоединился: 2007-08-31 11:37:20.710000
|
Ну во-первых это, конечно, убойный конструктор, на который указал rgo:
stroka::stroka()
{
str=new char[5];
str = "12345";
} Тут сразу две ошибки: 1) при str="..", компилятор хочет повеситься:D. Не зря ведь придумали стандартные процедуры для работы со сторками(в начале со строками много мороки будет). В данном случае юзай strcpy(char*,const char*). 2) Ты пытаешься в массив из пяти(str=new char[5];) строк запихнуть пять символов! компилятору-то пох, но куда там теперь совать нулевой байт "\0"? Его просто нет, потому-то программа и вылетает при вызове HeapFree(); quote:
при вызове delete[] str; где str динамически выделенная строка прога вылетает. Читай заголовочные файлы! Тут проблема при освобождении фрагмента памяти. Рабочий код будет выглядить так:
#include <iostream>
class stroka
{
char* str;
public:
stroka();
~stroka()
{
delete[] str;
};
};
void main()
{
stroka a;
return;
}
stroka::stroka()
{
str=new char[6];
strcpy(str,"12345");
} И ещё один совет, пиши код в читабельном виде, если сейчас тут всего пара строк, то в больших функциях это будет очень усложнять работу.
|
|
|
|
|