malloc触发断点

时间:2014-10-02 09:18:14

标签: c++ c malloc extern

我正在构建一个由以下单独模块组成的应用程序: - GAClient:一个C ++可执行文件 - GAOrcl:Oracle Pro * C生成的C DLL - GAEngine:一个C ++ DLL - MyGAUtils:一个C ++函数库

以下是不同模块的关联方式: - GAClient从GAOrcl调用几个函数,从MyGAUtils调用一些函数; - GAOrcl从GAEngine调用一些函数(“DoGATraining”就是其中之一) - GAEngine从MyGAUtils调用几个函数

我在GAClient.cpp中有两条相似的说明:

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

和GAEngine.cpp:

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

我的问题是,当从GAClient调用时,malloc工作正常,但是当从GAEngine调用时随后崩溃。 Visual Studio调试器抛出“GAClient.exe触发断点”的恐怖,并指向一个“lseeki64.c”源文件,我不知道是什么...

我怀疑这可能与DoGATraining定义为外部“C”的事实有关:

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

知道我可以在哪里开始排查?

1 个答案:

答案 0 :(得分: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));