我在这里有一个可以正确执行的 C mex 文件,但是在 MATLAB 执行完成后,它会因段错误而崩溃。由于它在程序完成执行后崩溃,这让我认为 MATLAB 自动释放分配的内存导致了这个问题。但是,我释放了我自己的动态分配的变量,并且不尝试释放 mxArray 结构。请看一下,看看您是否可以帮助我确定导致 MATLAB 崩溃的原因。
#include <mex.h>
#include <matrix.h>
#include <stdio.h>
void mexFunction(
int nlhs, mxArray *plhs[],
int nrhs, const mxArray *prhs[])
{
/* Declare variables. */
int i ,j, numdims, *ipos, count;
const mwSize *dim_array;
mwSize size;
double *pos, rad;
/* Ingest inputs. */
numdims = mxGetNumberOfDimensions(prhs[0]);
dim_array = mxGetDimensions(prhs[0]);
rad = mxGetScalar(prhs[1]);
pos = mxGetData(prhs[0]);
size = dim_array[0]*dim_array[1];
ipos = (int*) mxMalloc(size);
for (i = 0; i < size; i++)
ipos[i] = (int) (pos[i]*rad);
count = 0;
for (i = 0; i < size; i+=2)
for (j = i + 2; j < size; j+=2)
if (ipos[i] == ipos[j])
if (ipos[i+1] == ipos[j+1])
count++;
mxFree(ipos);
/* Generate output */
plhs[0] = mxCreateDoubleScalar(count);
printf("\nProgram finished executing!\n");
}
提前感谢您的帮助!
编辑:我还应该注意,程序的输入是(按顺序)一个 2 xn 矩阵和一个标量,其中 n 可以是任何正整数。实际的程序会正确检查尺寸,但我没有在此处包含这些行以节省代码空间。