我正在构建一个由以下独立模块组成的应用程序:-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*));
我的问题是,malloc在从GAClient调用时运行良好,但随后在从GAEngine调用时崩溃。Visual Studio调试器抛出一个"GAClient.exe已触发断点"arror,并将我指向一个"lseeki64.c"源文件,我不知道它是什么…
我怀疑这可能与DoGATraining被定义为外部"C":这一事实有关
#define EXPORT __declspec(dllexport)
extern "C" EXPORT int __stdcall DoGATraining(int pPastDataCount, double* pPastData)
知道从哪里开始排除故障吗?
您想要一个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));