编写以下Matlab代码时:
for ii=1:n
x(ii) = foo( ii ); % foo is some function of ii that cannot be vectorized.
end
我收到以下警告:
变量x在每次循环迭代中似乎都会改变大小。
我的问题是:
那警告是什么意思?
为什么每次迭代都改变可变大小是件坏事呢?
如何解决这个问题呢?
这个问题不是的重复问题,因为它处理的是预分配的更一般的方面,而是它的一个特定实例。
关于动态内存的讨论:
提交人指出:
这样的内存块可以有效地用作更灵活的数组。实际上,这种方法在现实世界的C程序中更为普遍。它也比“可变大小数组”更有预见性和灵活性
他所说的内存块的类型如下:
const int size = 5;
int * array = calloc(size, sizeof(int));
然后使用另一个指针对数组进行迭代:
int * index = array;
for (i = 0; i < size; i++) {
*index = 1; // or whatever value
index++;
}
我的问题是,这种方法比这样的标准
我想知道我的数组存储在哪里,如果它有可变大小,如下面的代码,这是因为在我的教科书中,它说在运行时内存分配给堆是为了我的理解,但是它似乎实际上分配给堆栈,有人可以澄清堆栈和堆内存分配实际上是如何工作的。
#include<iostream>
using namespace std;
int main(){
int Array_size;
cin >> Array_size;
int array[Array_size];
return 0;
}
根据c99标准,我们可以编写以下代码,它完全合法
int x;
scanf("%d",&x);
int ar[x];
我的问题是,如果我可以这样分配一个数组,为什么我还需要malloc来重新分配可变大小的数组呢?
另外,您能否解释一下可变长度数组分配是如何发生的?在内心深处,它是否调用malloc来分配数组?