gpt4 book ai didi

c - 在 mex 代码中释放内存

转载 作者:太空宇宙 更新时间:2023-11-04 08:12:36 24 4
gpt4 key购买 nike

我正在编写一个 mex 代码,我认为我没有非常有效地使用内存。这就是我所做的。我正在为像

这样调用的变量分配内存
out=mxMalloc(sizeof(double)*N);

plhs[0]=mxCreateDoubleMatrix(1,N,mxREAL);

set(plhs[0],out);

问题是我没有释放分配给变量 out 的内存,因为如果我这样做,我将收到段错误,因为我将在 Matlab 中使用它。那么任何人都可以建议我更好的技术来完成上述命令正在做的事情吗?无论如何要为 out 释放内存或避免定义长度为 1X N 的矩阵?

谢谢。

最佳答案

您不需要使用mxMalloc 分配数组。 mxCreateDoubleMatrix 已经 分配数组。一旦您有了指向此数据的指针(使用 mxGetPr 获得),您就可以用必要的值填充数组。

double *out;

// Allocate memory for the first output
plhs[0] = mxCreateDoubleMatrix(1,N,mxREAL);

// Get the pointer to the output data
out = mxGetPr(plhs[0]);

// Run your algorithm here to populate out with the data you need

如果出于某种原因您确实需要以其他方式创建out,您希望在释放内存之前将该单独数组的内容复制到输出中.

double *out;
double *realout;

// Allocate data to use internally
out = mxMalloc(sizeof(double) * N);

// Initialize the array that will be returned to MATLAB
plhs[0] = mxCreateDoubleMatrix(1, N, mxREAL);
realout = mxGetPr(plhs[0]);

// Now copy all values to the MATLAB output
for ( j = 0; j < N; j++ )
realout[j] = out[j];

// Now you can free up memory for out
mxFree(out)

关于c - 在 mex 代码中释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38215317/

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