При компилировании выдает ошибку Вызвано исключение по адресу 0x77C7F94D (ntdll.dll) в test2.exe: 0xC0000374: Куча была повреждена (параметры: 0x77CBB960). Необработанное исключение по адресу 0x77C7F94D (ntdll.dll) в test2.exe: 0xC0000374: Куча была повреждена (параметры: 0x77CBB960). Я понимаю что ошибка в функции strcat, но не могу понять по чему
#include <stdio.h>
#include <string>
#include <iostream>
using namespace std;
int main()
{
const char* Path = "D:\\SQLite\\";
char oldname[] = "1.txt";
char newname[] = "2.txt";
const char* NewPath = "D:\\";
char* Files = new char[strlen(Path) + strlen(oldname)+1];
strcat(Files, Path);
strcat(Files, oldname);
cout<<Files;
return 0;
}
Итак, поехали. Не компилировать, а выполнять.
char* Files = new char[strlen(Path) + strlen(oldname)+1];
Без проблем, менеджер памяти выделил место в памяти и отдал его вам. Само собой, никак его не чистя (вы же не говорили, что его надо инициализировать?). И там лежит, например, что-то вроде
asdgysyh782qy6yr76786bxstgq748qs67576529187%*^%$@!VFGG&%&T#@
Словом мусор. К которому вы ДОБАВЛЯЕТЕ свою строку. Приписываете ее в конец. Который может оказаться далеко за пределами выделенной памяти:
strcat(Files, Path);
Почему бы вам не СКОПИРОВАТЬ первую часть новой строки?
strcpy(Files, Path);
Вопрос не риторический - мне действительно интересно, неужели там, откуда вы узнали о strcat
(на лекции, из книги...) ничего не было сказано сначала о strcpy
?
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Подскажите пожалуйста, по решению вопросаУ меня есть колонка STATE (boolean), добавил колонку NAME (varchar)