gpt4 book ai didi

matlab - Mex 函数在完成时崩溃

转载 作者:太空宇宙 更新时间:2023-11-03 20:02:38 25 4
gpt4 key购买 nike

我这里有一个可以正确执行的 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 x n 矩阵和一个标量,其中 n 可以是任何正整数。实际程序会正确检查尺寸,但我没有在此处包含这些行以节省代码空间。

最佳答案

UPD。你是对的 - 当矩阵变大时,它会崩溃 :)

所以我想我有一个想法:

试着改变你的两行代码

plhs[0] = mxCreateDoubleMatrix(1, 1, mxREAL);
mxGetPr(plhs[0])[0] = (double) count;

一个新的单行

plhs[0] = mxCreateDoubleScalar(count);

在我完成之后它不再崩溃了。

关于matlab - Mex 函数在完成时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13223990/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com