С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
1

CodeGuard и размер выделенного блока

20.03.2013, 13:00. Показов 1031. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток у меня выскакивает ошибка,вернее не ошибка всё работает как надо,CodeGuard ругается на утечку памяти несмотря на то что везде прописано delete в общем код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
void __fastcall TForm1::BitBtn1Click(TObject *Sender)
{
if(SaveDialog1->Execute())
 {
    AnsiString ij,ij1,ij2,ij3,ij4;
    ij=StringReplace(SaveDialog1->FileName,"\\","\\\\",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase)+"\\res.ij";
    char* filepath=new char[ij.Length()];
    strcpy(filepath,ij.c_str());//тут
    ofstream file;
    file.open(filepath,std::ios::out|std::ios::binary);
    file.write((char*)&mas,sizeof(mas));
    file.close();
 CreateDirectory(SaveDialog1->FileName.c_str(),NULL);
 ij1=StringReplace(SaveDialog1->FileName,"\\","\\\\",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase)+"\\rb1.ij";
 ij2=StringReplace(SaveDialog1->FileName,"\\","\\\\",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase)+"\\rb2.ij";
 ij3=StringReplace(SaveDialog1->FileName,"\\","\\\\",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase)+"\\rb3.ij";
 ij4=StringReplace(SaveDialog1->FileName,"\\","\\\\",TReplaceFlags()<< rfReplaceAll << rfIgnoreCase)+"\\rb4.ij";
 Label1->Caption=ij1;
 char *ijj1 = new char[ij1.Length()];
 strcpy(ijj1,ij1.c_str());//ещё тут
 savebit(Image1,ijj1);
 char *ijj2 = new char[ij2.Length()];
 strcpy(ijj2,ij2.c_str()); // и тут
 savebit(Image2,ijj2);
 char *ijj3 = new char[ij3.Length()];
 strcpy(ijj3,ij3.c_str()); //везде на strcpy 
 savebit(Image3,ijj3);
 char *ijj4 = new char[ij4.Length()];
 strcpy(ijj4,ij4.c_str());
 savebit(Image4,ijj4);
 delete[] filepath; 
delete[] ijj1;
 delete[] ijj2;
 delete[] ijj3;
 delete[] ijj4;
 }
}
глючит CodeGuard или я как обычно что-то упустил?
prntscrn:
Миниатюры
CodeGuard и размер выделенного блока  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.03.2013, 13:00
Ответы с готовыми решениями:

CodeGuard в x64
В Builder x32 есть CodeGuard. В Builder x64 его нет. Для написания прог на x64 мне приходится...

CodeGuard не срабатывает
Доброго! Включил в настройках проекта CodeGuard. В проекте всего одна кнопка. ...

CodeGuard в C++ Builder 6
Добрый день. Подскажите как пользоваться сабжевой штукой. Вроде как включил, галочки поставил, но...

Ошибки и логи CodeGuard
Здрасте, есть у меня ошибочка в програмке, пересмотрел весь код, не могу найти, одно наверняка...

4
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32992 / 21298 / 8180
Регистрация: 22.10.2011
Сообщений: 36,593
Записей в блоге: 8
20.03.2013, 15:57 2
ijonhson, Length() возвращает длину строки без нуль-терминатора, а strcpy пытается копировать всё, включая '\0', вот и не хватает места...

Цитата Сообщение от ijonhson Посмотреть сообщение
CodeGuard ругается на утечку памяти
Не на утечку он ругается, а на то, что есть попытка обратиться к 19-му байту, в то время, как размер выделенного блока - всего 18.
1
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
20.03.2013, 16:16  [ТС] 3
и как быть
C++
1
char *ijj1 = new char[ij1.Length()+1];?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32992 / 21298 / 8180
Регистрация: 22.10.2011
Сообщений: 36,593
Записей в блоге: 8
20.03.2013, 16:21 4
Да, выделять память, достаточную для хранения строки вместе с завершающим символом.
0
47 / 47 / 15
Регистрация: 09.03.2011
Сообщений: 584
20.03.2013, 16:29  [ТС] 5
красота спасибо
0
20.03.2013, 16:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.03.2013, 16:29
Помогаю со студенческими работами здесь

CodeGuard ругается при записи в файл
Здравствуйте! Решил проверить код записи массива в файл, подключив CodeGuard: ofstream...

Включить CodeGuard и найти Access Vioaltion
Здравствуйте. О себе:) : Win7, C++ Builder XE3, AsyncPro. Столкнулся со следующей проблемой:...

Ошибка при проверке программы через CodeGuard
Есть программа, которая работает с потоками. Все в принципе работает правильно, но при проверке...

Отправка выделенного блока
сделал такую кострукцию &lt;html&gt; &lt;head&gt; &lt;script type=&quot;text/javascript&quot;&gt; function clear(){...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru