【问题标题】:malloc triggering breakpointmalloc 触发断点
【发布时间】:2014-10-02 09:18:14
【问题描述】:

我正在构建一个包含以下独立模块的应用程序: - 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)

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

【问题讨论】:

    标签: c++ c malloc extern


    【解决方案1】:

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

    【讨论】:

    • 供参考,don't cast malloc
    • 谢谢@AlterMann,这确实是个问题,但是行为没有改变;调试器仍然触发断点并跳转到这个(对我来说)晦涩的“lseeki64.c”...
    • @gcaglion,你能把电话显示给DoGATraining吗?
    • int BestCid; BestCid=DoGATraining(pTotalBars, HVal); if(BestCid
    • 确保您没有在 DLL 边界的一侧分配内存并在另一侧释放它
    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 2018-09-25
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多