2014-10-02 5 views
1

Я строю приложение, состоящее из следующих действий, отдельные модули: - GAClient: С ++ исполняемый - GAOrcl: С DLL генерируется Oracle Pro * C - GAEngine: C++ DLL - MyGAUtils: библиотека функций C++таНос запуск точки останова

Вот как связаны разные модули: - GAClient вызывает несколько функций от GAOrcl и несколько из MyGAUtils; - GAOrcl называет несколько функций из GAEngine ("DoGATraining" является одним из них) - GAEngine называет несколько функций из MyGAUtils

у меня есть два похожих инструкций в GAClient.cpp:

double* vKaz=(double*)malloc(5*sizeof(double*)); 

и GAEngine. каст:

double* vPastTarget=(double*)malloc(5*sizeof(double*)); 

Моя проблема в том, таНос отлично работает при вызове из GAClient, но впоследствии падает, когда вызывается из GAEngine. Отладчик Visual Studio бросает сообщение «GAClient.exe вызвал точку останова» и указывает мне на исходный файл «lseeki64.c», о котором я не знаю, что такое ...

Я подозреваю, что это может иметь что-то с тем, что DoGATraining определяется как экстерном «C»:

#define EXPORT __declspec(dllexport) 
extern "C" EXPORT int  __stdcall DoGATraining(int pPastDataCount, double* pPastData) 

Любая идея, где я мог бы начать поиск неисправностей?

ответ

5

Вы хотите массив из 5 дублей, а не массив из 5 указателей в два раза, так что изменить

double* vKaz=(double*)malloc(5*sizeof(double*)); 

в

double *vKaz = malloc(5 * sizeof(double)); /* don't cast malloc */ 

или

double *vKaz = malloc(5 * sizeof(*vKaz)); 
+1

Для справки [дон 't cast malloc] (http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – isedev

+0

Спасибо @AlterMann, это было действительно интересно м, однако поведение не изменяется; отладчик по-прежнему вызывает точку останова и переходит к этому (мне) неясному «lseeki64.c» ... – gcaglion

+0

@gcaglion, вы можете показать вызов 'DoGATraining'? –

Смежные вопросы