![]() |
|
|
![]()
|
|
| bublik478 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.2.2006 Репутация: нет Всего: нет |
проблема в следующем: на С++ создана (ATL) DLL для использование в C# проекте. в DLL пока тока одна функция, передаётся указатель на массив чисел INT (координаты X и Y, это полигон) и точка с координатами X,Y. Функция определят лежит ли точка внутри полигона или снаружи. тест работает нормально, но в многократном вызове этой функции из C# (раз 50-150 подряд) иногда выскакивает следующая ошибка: "The server threw an exception." если у кого есть опыт посдкажите пожалуйста хотябы где начать рыть. С++ тока начал изучать и не хочу отказываться, работает быстрее, темболее есть возможность компилировать в Native code. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
а больше что ничего не говорит ?... ну там call stack До интеропов .... может и не там проблема ...
возмжно у вас память течет, возможно выходите за границы массива... да малоли что) -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| bublik478 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.2.2006 Репутация: нет Всего: нет |
нет, больше ничего не говорит! может и память течет, правильно, малоли что! вот поэтому и спрашиваю, где начать копать. за рамки массива не может выйти, в С++ я передаю указатель на массив (на ячейку памяти) и передаю тип данных, и их кол-во, а С++ тупо перебирает память и ему всёравно к чему эта память относится к моей коллекции или это уже другие данные, ошибки никогда не будет! это уже моя проблема корректные данные передать. а как с памятью в С++? я просто передаю указатель на массив и пару целых чисел, нужно ли что-то чистить потом после работы этой фукции?? как я понимаю это не управляемый код и там нет гарбадж коллектора??? т.е. ушёл объект и память очистилась??? |
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
очень может быть что возникает исключение при заступе за границы массива... в любом случае вы можете вооружится дебаггером (winDBG) вам поможет сайт http://www.dumpanalysis.org/ -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| bublik478 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.2.2006 Репутация: нет Всего: нет |
jonie >> очень может быть что возникает исключение при заступе за границы массива... c++ не генерирует ошибку привыходе за рамки массива, он просто перебирает память дальше, он не знает про масиив c# ничего. а размер массива конечно я передаю из c#, чтоб с++ знал где остановится. а дебагер я посмотрю, спасибо |
|||
|
||||
| jonie |
|
||||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
с++ нет, диспетчер памяти винды - легко. но при вызове из c# среда может ставить свои ловушки (SEH) и отлавливать уже в jit-е эти все вещи... дебаггер всем поможет) попробуй
-------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
||||
|
|||||
| bublik478 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 15.2.2006 Репутация: нет Всего: нет |
странно, передо мной книжка по с++ лежит Герберт Шилдт, там написано что ошибки не должно произойти, если передан указатель на первый член массива и если рамки цикла выходят за размер массива. реально я попробовал специально ошибочный размер передавать, всегда больший чем надо! и в 6 случаев из 10 получил абсолютно такую же ошибку как и имел вначале! может когда память не блокировано с++ пользуется ей. но если она недоступна то появляется ошибка? |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 5 Всего: 118 |
языку пофиг что ты вышел за границы, а вот ОС вовсе не пофиг. Память в ОС выделяется странично, тыже пытаешься залесть на невыделенную страницу, и ОС жутко обижается и валит глюченное ПО. Почитай про менеджер памяти винды.
Происходит исключение ОС, а не языковое throw. -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: COM/DCOM/ActiveX/ATL/CORBA | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |