Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> HEAP CORRUPTED DETECTED 
:(
    Опции темы
ZIFIR
Дата 30.1.2011, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Код

char* chFile_path = strcat((char*)folder_path.c_str(),FILE_NAME);


Появляется ошибка: приложение пишет в память после конца кучи.
PM MAIL   Вверх
boostcoder
Дата 30.1.2011, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



в folder_path.c_str() достаточно выделил для конкатенации?
PM WWW   Вверх
alexvs11
Дата 30.1.2011, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


hell is here
**


Профиль
Группа: Участник
Сообщений: 518
Регистрация: 21.8.2010

Репутация: 2
Всего: 10



Код

(folder_path + string(FILE_NAME)).c_str() ?

и аллокатор сам позоботится обо всем

Это сообщение отредактировал(а) alexvs11 - 30.1.2011, 14:59
PM MAIL   Вверх
ZIFIR
Дата 30.1.2011, 15:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 129
Регистрация: 8.3.2006

Репутация: нет
Всего: нет



Нет, а как?
PM MAIL   Вверх
boostcoder
Дата 30.1.2011, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(ZIFIR @  30.1.2011,  15:08 Найти цитируемый пост)
как?

это зависит от того, что конкретно тебе требуется.
не зная этого, сложно предложить оптимальный вариант.

вариант первый:
Код

int total_len = folder_path.length() + strlen(FILE_NAME);
char* chFile_path = malloc(total_len);
strcpy(chFile_path, folder_path.c_str());
strcat(chFile_path, FILE_NAME);

...

free(chFile_path);

это плохой вариант.

второй вариант:
Код

std::string chFile_path_s = folder_path + FILE_NAME;
const char* chFile_path = chFile_path_s.c_str();


Это сообщение отредактировал(а) boostcoder - 30.1.2011, 15:46
PM WWW   Вверх
null56
Дата 30.1.2011, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: нет
Всего: 12



Цитата(ZIFIR @  30.1.2011,  15:08 Найти цитируемый пост)
Нет, а как? 

посмотри на свой пример
Код

char* chFile_path = strcat((char*)folder_path.c_str(),FILE_NAME);

теперь хелп по функции strcat
Код

char *strcat(char *dest, const char *src);

Цитата

The  strcat()  function appends the src string to the dest string, overwriting the null byte ('\0') at the end
       of dest, and then adds a terminating null byte.  The strings may not overlap, and the dest  string  must  have
       enough space for the result.

последнее предложение тебе говорит, что запись в переменную dest надо вести лишь в том случае, если размер памяти, на которую указывает dest достаточен!!!
поэтому функция называется небезопасной, так как за размер памяти должен отвечать пользователь
далее метод класса std :: string
Код

const char* c_str ( ) const;

Цитата

Get C string equivalent
Generates a null-terminated sequence of characters (c-string) with the same content as the string object and returns it as a pointer to an array of characters.

A terminating null character is automatically appended.

The returned array points to an internal location with the required storage space for this sequence of characters plus its terminating null-character, but the values in this array should not be modified in the program and are only granted to remain unchanged until the next call to a non-constant member function of the string object.

последнее предолжение тебе говорит, что модифицировать данные, получаемые этим методом нельзя!!!
он лишь возвращает тебе указатель. функция strcat ничего не знает, о том, что это класс и что надо что - то расширять, она лишь уверена в том, что может писать по адресу этого указателя...
теперь ситуация
Код

std :: string folder_path("c:\\"); // длина строки 3
char* chFile_path = strcat((char*)folder_path.c_str(),FILE_NAME); // функция начинает писать в память начиная с позиции 3,
//то есть после "c:\", но память не расширяется и ты получаешь выход за пределы

используй контейнеры строк, как писал boostcoder


Модератор: Улучшил читабельность сообщения

Это сообщение отредактировал(а) bsa - 30.1.2011, 21:06
PM MAIL   Вверх
boostcoder
Дата 30.1.2011, 19:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



null56,  smile 
как ты умудряешься создавать ответ во вложенной цитате? smile 

Это сообщение отредактировал(а) boostcoder - 30.1.2011, 19:41
PM WWW   Вверх
null56
Дата 30.1.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 721
Регистрация: 19.3.2008

Репутация: нет
Всего: 12



Цитата(boostcoder @  30.1.2011,  19:38 Найти цитируемый пост)
как ты частенько умудряешься создавать ответ во вложенной цитате?

видимо я редко отвечаю на вопросы, я их больше задаю  smile 

Это сообщение отредактировал(а) null56 - 30.1.2011, 19:42
PM MAIL   Вверх
boostcoder
Дата 30.1.2011, 19:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



ааа, нет, это не цитата. но не понятно что это за рамка поверх твоего ответа.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1006 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.