我正在构建一个由以下单独模块组成的应用程序: - 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)
知道我可以在哪里开始排查?
答案 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));