переполнение кучи в projAPI (библиотека ГИС)

Я пытаюсь использовать projAPI (http://trac.osgeo.org/proj/wiki/ProjAPI) для расчета прогнозов. К сожалению, документация … ну … не очень хорошая. Кроме того, я не очень хорош в программировании на C ++. Настройка проекта в VisualStudio — это некая ракетостроение. В любом случае, настройки следующие:

  • Каталоги VC ++ => Включить каталоги => добавлен каталог включения библиотеки
  • Каталоги VC ++ => Каталоги библиотек => добавлен каталог lib, содержащий .lib
    файлы
  • Linker => Input => Addit. Зависимости => добавлены «proj.lib» и «proj_i.lib»

Проект содержит один cpp для тестирования:

#include "../include/proj_api.h"
int main(int argc, char** argv){
projPJ projection;
projection = pj_init_plus("+proj=merc +ellps=clrk66 +lat_ts=33");
}

…составление как очарование …


Приходя в pj_init_plusвылетает:

Debug Assertion Failed!

Program: ...cuments\visual studio 2012\Projects\testLib\Debug\testLib.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1322

Expression: _CrtIsValidHeapPointer(pUserData)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

ignore вызывает вторую ошибку:

Debug Assertion Failed!

Program: ...cuments\visual studio 2012\Projects\testLib\Debug\testLib.exe
File: f:\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1328

Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)

For information on how your program can cause an assertion
failure, see the Visual C++ documentation on asserts.

…главная проблема: где ошибка? мне не удалось собрать библиотеку? ИЛИ ЖЕ я провалил настройку проекта?


компиляция библиотеки:

=> запустить vcvars32.bat из визуального дерева студии, то

$cd to the downloaded directory
$nmake /f makefile.vc
$nmake /f makefile.vc install-all

проверил C: \ PROJ Каталог: все есть, скопировал lib и включил каталоги в мой проект и попробовал.

1

Решение

Итак, я получил это работает. Очевидно, что проблема возникает только в режиме отладки. Я переключился в режим релиза, и он работает.

я думаю, что lib запускает функцию, которая каким-то образом убивает отладочный хук …

1

Другие решения

Похоже, что он ожидает истинный указатель кучи, попробуйте выделить указатель с достаточным пространством для вашей строки (запомните дополнительный нулевой байт!), Передайте strcpy, передайте это.

0

По вопросам рекламы [email protected]