C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Очистка динамической памяти
Катя
Отправлено: 30.10.2005, 10:41


Не зарегистрирован







В чем моя ошибка?...я уже голову сломала..
Прога спотыкается на delete [] s; ........причем не каждый раз...навер, в зависимости от введенного значения...
Выдается ошибка Access volation at adress 3260995A in module 'CC3260MT.DDL'. Write of adress EFE0E708

void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp;
char *s;
AnsiString S;
int a;
S=Memo1->Text;
a=S.Length();
s=new char[a];
s=S.c_str();
fp=fopen("temp.dat","wb");
fwrite(&a,sizeof(int),1,fp);
fwrite(s,sizeof(char),a,fp);
fclose(fp);
delete [] s;
}
** pasha
Отправлено: 30.10.2005, 12:24


Не зарегистрирован







Ну во первых не называйте переменные одинаковыми
именами, хоть и мал/большой регистр — запутаетесь сами
и наделаете ошибок.

Во-вторых, советую поставить

s=new char[a+1];


Георгий
Отправлено: 30.10.2005, 12:30


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



всё не правильно


1. строки:
CODE
a=S.Length();
s=new char[a];
неправильны т.к. строка заканчивается 0 и под него тоже место нужно. меняем на
CODE
a=S.Length();
s=new char[a+1];


2. строка:
CODE
s=S.c_str();
самая большая ошибка. в этой строке копируется значение указателя, а ни как не строка. И в этой же строке происходит утечка памяти. меняем на
CODE
strcpy(s,S.c_str());


3. и на последок всей этой ерундой с выделенем памяти можно вообще не заниматься:
CODE
void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp=0;
int a = Memo1->Text.Length();
fp=fopen("temp.dat","wb");
fwrite(&a,sizeof(int),1,fp);
fwrite(Memo1->Text.c_str(),sizeof(char),a,fp);
fclose(fp);
}


PS. да и от использования fopen и fwrite надо отказываться в пользу использования fstream

Отредактировано Георгий — 30/10/2005, 13:34
Катя
Отправлено: 30.10.2005, 15:26


Не зарегистрирован







Пасиб...большое!!!...smile.gif))
все работает на ура...

Вернуться в Вопросы программирования в C++Builder