c++ - malloc 触发断点

标签 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)

知道我可以从哪里开始进行故障排除吗?

最佳答案

你想要一个包含 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/

相关文章:

c++ - SQLSTATE 24000 - 无效游标状态 ODBC VS c++

c++ - cocos2d-x 退出回调?

c - 如何从字符串重建原始 BLOB 值?

c - 带字符串的结构数组

c - 将文件加载到 C 中的二维字符数组中

C 中内存读写的自定义处理

c++ - 用短路操作替换链式 ifs

c++ - 为什么这两个类具有相同的大小,该方法是否对一个类构成无大小?

c - 使用结构体指针的源代码

c - K&R p188 中给出的 free 函数实际上释放了之前分配的内存吗?