Matlab编码器重新分配

时间:2013-07-02 17:29:05

标签: matlab memory-management dynamic-memory-allocation matlab-coder codegen

我的matlab函数中有一些这样的代码:

for i = init:end
    a= [a, char(zeros(size(a))]
    a= func(a)
    a = a(a~=0)
end

因此,在循环的每个步骤中,首先将a的大小加倍,对其应用一些随机函数,然后删除零的所有内容。

现在,我想在此运行编码器,最终将其转换为c代码。当然,它给了我分配错误。

允许动态分配的数组没有帮助。我不能简单地为我的变量使用不同的名称,因为它在for循环中。

1 个答案:

答案 0 :(得分:1)

这可能会晚一年,但是:

function a = foobar(init,ub)
coder.varsize('a',[1,Inf]);
a = 1;
for i = init:ub
    a = [a, ones(size(a))];
    a = sin(a);
    a = a(a~=0);
end

>> codegen foobar -args {1,1} -report

在R2014a中为我工作。

当您尝试生成数组时,可能需要使用coder.varsize来告诉MATLAB Coder该数组将改变大小。在许多情况下,MATLAB Coder可以在不使用coder.varsize的情况下解决这个问题,因此最好先不使用它然后在遇到错误时添加它。