我在這裏有一個C mex文件,它可以正常執行,但是在完成執行後會使用segfault崩潰MATLAB。由於它在程序執行完成後崩潰了,這讓我認爲MATLAB自動釋放分配的內存會導致問題。但是,我釋放了我自己的動態分配的變量,並且不嘗試釋放mxArray結構。請看一看,看看能否幫助我確定它爲什麼會導致MATLAB崩潰。Mex函數在完成後崩潰
#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 x n矩陣和一個標量,其中n可以是任何正整數。實際的程序正確地檢查了尺寸,但我沒有在這裏包含這些行來節省編碼空間。
現在很有趣:) – Dimochka