Катя |
Отправлено: 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 | 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 |
|
Не зарегистрирован
|
Пасиб...большое!!!...))
все работает на ура...
|
|
|