我正在构建一个由以下独立模块组成的应用程序: - 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)
知道我可以从哪里开始进行故障排除吗?
最佳答案
你想要一个包含 5 个 double 的数组,而不是一个包含 5 个 double 指针的数组,所以更改
double* vKaz=(double*)malloc(5*sizeof(double*));
到
double *vKaz = malloc(5 * sizeof(double)); /* don't cast malloc */
或
double *vKaz = malloc(5 * sizeof(*vKaz));
关于c++ - malloc 触发断点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26157812/