Непонятная функция
От: soulless Россия  
Дата: 27.12.02 08:39
Оценка:
Проблема такая: приложение под GLUT при отладке в одной из функций выдает ошибку Unhandled exception in s3d5.exe: 0xC0000005: Access Violation (что-то с памятью). В Call Stack'е следующее:
CALC_MESH::triangulate(VERTEX * 0xcccccccc, int -858993460) line 108 + 12 bytes
c0400000()

Функция c0400000() — вообще непонятно откуда взялась, а параметры в triangulate-функции тоже какие-то странные (кстати из-зи них и ошибка).
Re: Непонятная функция
От: Mozhay Россия www.mozhay.chat.ru
Дата: 27.12.02 08:53
Оценка:
Здравствуйте, soulless, Вы писали:

S>Проблема такая: приложение под GLUT при отладке в одной из функций выдает ошибку Unhandled exception in s3d5.exe: 0xC0000005: Access Violation (что-то с памятью). В Call Stack'е следующее:

S>CALC_MESH::triangulate(VERTEX * 0xcccccccc, int -858993460) line 108 + 12 bytes
S>c0400000()

S>Функция c0400000() — вообще непонятно откуда взялась, а параметры в triangulate-функции тоже какие-то странные (кстати из-зи них и ошибка).

0xcccccccc — таким образом Debug-версия C-Runtime Library заполняет неинициализированные локальные переменные. Так что ты передал первым параметром неинициализированную переменную. Отсюда и ошибка.
Кстати, в Release-версии в ней будет 0. И все может работать по другому, в том числе и правильно...
Re[2]: Непонятная функция
От: soulless Россия  
Дата: 27.12.02 18:50
Оценка:
Я имел ввиду, что функция triangulate вызывается из какой-то c04000000() с неправильными параметрами. При компиляции Release ошибка остается.
Re[3]: Непонятная функция
От: Mozhay Россия www.mozhay.chat.ru
Дата: 30.12.02 08:06
Оценка:
Здравствуйте, soulless, Вы писали:

S>Я имел ввиду, что функция triangulate вызывается из какой-то c04000000() с неправильными параметрами. При компиляции Release ошибка остается.


И параметры ф-ции и адрес возврата передаются в функцию через стек. Кроме того, в стеке же хранятся локальные переменные. Могу только предположить, что где-то портится стек (выход за границы массива — наиболее вероятная причина). Если это не так, то нужна доп. информация.
Re[4]: Непонятная функция
От: soulless Россия  
Дата: 31.12.02 05:42
Оценка:
Спасибо, все исправил, но появилась еще ошибка: в деструкторе при удалении массива
delete [] potential_buffer

получается ошибка где-то в глубине функций типа dealloc. Все элементы удаляемого массива определены и никаких ошибок во время выполнения не было. А эта выдается при завершении приложения.
Re[5]: Непонятная функция
От: Mozhay Россия www.mozhay.chat.ru
Дата: 01.01.03 20:11
Оценка:
Здравствуйте, soulless, Вы писали:

S>Спасибо, все исправил, но появилась еще ошибка: в деструкторе при удалении массива

S>
S>delete [] potential_buffer
S>

S>получается ошибка где-то в глубине функций типа dealloc. Все элементы удаляемого массива определены и никаких ошибок во время выполнения не было. А эта выдается при завершении приложения.

Скорее всего об ошибке говорит отладочная версия C Runtime Library. Если так, то чтобы понять, в чем ошибка, надо прочитать то, что она написала. Пока что могу предположить все тот же выход за границы этого массива. При выделении блока памяти отладочная версия CRT выделяет немного больший блок и по краям этого блока вписывает свою информацию. При освобождении блока проверяется целостность этой информации и, если она нарушена, пишется соответствующее сообщение, например "DAMAGE: ... after normal block ...". Если я ошибаюсь, приведи более подробное описание ошибки. За подробностями загляни в MSDN -> Visual C++ documentation -> Using Visual C++ -> Visual C++ Programmers Guide -> Run-Time Library Reference -> Debug Function Reference
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.