调用 drawnow 导致堆损坏

Calling drawnow causes heap corruption

我还是 Matlab 和 Simulink 的新手,我发现了一个奇怪的问题。

我有一系列 Simulink 块(processA、processB 等),它们是串行连接的 Matlab 函数。它们都具有相同的格式。

function outConfig = run_processA_Fcn(inConfig)

coder.extrinsic('hilite_system');
hilite_system('myModel/processA');
drawnow;

coder.extrinsic('run_processA_mex');
run_processA_mex(inConfig);

hilite_system('myModel/processA', 'none');
drawnow;

outConfig = inConfig;

函数 run_processA_mex() 是一个 .mexw64 MEX 函数,它接收指向堆的指针(通过 inConfig)。在这些 MEX 函数中,我调用了我的 Visual Studio 编译的 C 代码(在 DLL 中)。

每个 Simulink 块可能需要一些时间来处理,所以我希望它突出显示当前块。问题是当我调用 drawnow 时,我的指针中的数据更改为一些无效值。指针本身指向相同的地址,只是它们指向的值是错误的。如果我只是注释掉drawnow,我的数据就没问题了。

我不清楚解决此问题的最佳方法。我不知道为什么调用 drawnow 会破坏我的堆。任何帮助都会很棒。

好吧,这对我来说很愚蠢。我传递的指针指向堆,但它们是指向指针的指针。最终数据位于堆栈中,因此由于引入了额外的函数调用,我正在丢失该数据。

我现在已经正确地将数据分配到堆上,现在似乎可以正常工作了。