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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Непонятное исключение в dbgheap.c, при работе с CFile и CStdioFile 
:(
    Опции темы
shedon
  Дата 17.3.2004, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



у меня есть функция которая выглядит так
Код

BOOL CCheckingDlg::SaveData()
{
CFile fFile;
DWORD dw = 1500;
//char sData[20480];
//memset(sData, 0, strlen(sData));
CString sCode = _T("");
try{
// Загружаем заголовок и строку с именем прибора
fFile.Open("Head.dat", CFile::modeRead);
fFile.Read(sCode.GetBuffer(), fFile.GetLength());
file.Write(sCode.GetBuffer(), sCode.GetLength());
file.Write(m_sDevCheckName.GetBuffer(), m_sDevCheckName.GetLength());
fFile.Close();
}
catch(CFileException *pEx)
{
 pEx->ReportError();
 pEx->Delete();
}

return TRUE;
}

file является объектом CStdioFile.
всё функция проходит нормально, всё читается, всё записывается, но сразу после выхода из функции возникает эксцепшон
Цитата
Unhandled exception at 0x77fa144b (NTDLL.DLL) in EtalonFM.exe: User breakpoint.

указывает на файл dbgheap.c
Код

#else  /* WINHEAP */

       /*
        * Go through the heap regions and see if the pointer lies within one
        * of the regions of the local heap.
        *
        * Pointers from non-local heaps cannot be handled. For example, a
        * non-local pointer may come from a DLL that has the CRT linked-in.
        *
        */

       for (i = 0; (base = _heap_regions[i]._regbase) != NULL &&
               i < _HEAP_REGIONMAX; i++)
       {
           if (pUserData >= base && pUserData <
                   (void *)(((char *)base)+_heap_regions[i]._currsize))
               return TRUE;
       }

       return FALSE;

#endif  /* WINHEAP */
} // ЭКСЦЕПШЕН УКАЗЫВАЕТ СЮДА !!!!

да, забыл компилю под VC7.0 smile.gif


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
Гость_сергей
Дата 18.3.2004, 15:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











sad.gif ломаешь
выходишь где то за регион

  Вверх
shedon
Дата 18.3.2004, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



за какой регион ? в sCode слишком большое значение ?


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
sergejzr
Дата 18.3.2004, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Un salsero
Group Icon


Профиль
Группа: Админ
Сообщений: 13285
Регистрация: 10.2.2004
Где: Германия г .Ганновер

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



А что дибагер говорит?
Такого рода ошибки происходят, когда деструктируются обьекты, заложенные в функции.
посмотри fFile, sCode
возможно я не прав


Это сообщение отредактировал(а) sergej.z - 18.3.2004, 16:14


--------------------
PM WWW IM ICQ Skype GTalk Jabber AOL YIM MSN   Вверх
srd
Дата 18.3.2004, 16:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нереварин
**


Профиль
Группа: Участник Клуба
Сообщений: 951
Регистрация: 30.8.2003
Где: Владивосток

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



Проблема в неправильном использовании объекта класса CString. Во первых, ты копируешь что-то в строку, не выделив перед этим память. Длину буфера можно указать в параметре функции-члена GetBuffer. Во вторых, после использования полученного буфера необходимо вызвать функцию-член ReleaseBuffer() до любого другого использования строки. Т.е.
Код

CString s;
char *buffer = s.GetBuffer(11);
lstrcpy(buffer, "0123456789");
s.ReleaseBuffer(); // после этой строки buffer указывает уже не известно на что

Поэтому и получается, что ломается куча.


--------------------
Не смей читать мою подпись!!!
PM MAIL Jabber   Вверх
shedon
Дата 18.3.2004, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



а что он должен говорить ? функция проходит нормально, а после выхода эксцепшон, типа инструкция такая-то обратилась к такой-то памяти
Добавлено @ 16:18
srd,
посмотрю, спасибо


--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
shedon
Дата 19.3.2004, 08:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Экс. модератор
Сообщений: 1209
Регистрация: 17.1.2003
Где: Нижнiй Новгородъ

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



srd, спасибо, всё зароботало



--------------------
Programming is like sex: One mistake and you have to support it your lifetime
PM MAIL WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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