我想在vs2010环境中为我的代码创建可变长度数组,
我尝试使用长度为x的数组进行编码,因为它正在被用户传递。但我面临的错误是
“错误C2466:无法分配恒定大小为0的数组”,“错误C2133:'v_X_array':未知大小”。
func1(int x)
{
int v_X_array[x];
int i;
for(i=0;i<x;i++)
{
v_X_array[i]= i;
}
}
我希望ans为v_X_array[0] = 0
,v_X_array[1] =1
,v_X_array[2]=2
... v_X_array[10]=10
;为x = 10;
我该怎么做?
注意:因为不应该使用calloc
和malloc
。
答案 0 :(得分:-1)
如果需要代码可移植,则不能使用这种数组定义来处理内存区域。
在没有具体实现的情况下,您可以使用两种通用方法:
如果您选择选项2:
a。当您不再需要内存时,别忘了取消分配内存。
b。为避免频繁分配和取消分配,您可以定义一次缓冲区(可能大于当前调用的缓冲区),并多次使用。您可能会获得与上述选项1相同的结果-从头开始定义一个大型数组。
由于您不应该使用动态分配(“不应使用calloc和malloc”),因此您将获得选项1。
我希望ans为 v_X_array [0] = 0 ,v_X_array [1] = 1,v_X_array [2] = 2 ... ... v_X_array [10] = 10 ;为 x = 10 ;
您希望将11个值存储在只能容纳10个值的数组中?
答案 1 :(得分:-1)
您不能分配未知大小的数组。 因此您需要“在运行时”动态分配它。 您可以使用c ++中的“ new”或c中的“ mallco”进行分配。
例如:
在C ++中,如果要分配未知大小的数组,则应执行以下操作:
int* v_X_array = new int[x];
int i;
for(i=0;i<x;i++)
{
v_X_array[i]= i;
}
我们使用整数指针的原因是“ new”返回数组的基地址“第一个元素的地址”,因此唯一可以存储地址的就是指针。
在C中,如果要分配未知大小的数组,则应执行以下操作:
int* v_X_array = (int*) malloc(x*sizeof(int));
int i;
for(i=0;i<x;i++)
{
v_X_array[i]= i;
}
malloc函数采用单个参数,该参数指定要分配的字节数,并返回空指针,因此需要强制转换(int *)。
有关更多说明,请参见下一部分:
如果我们需要分配20个整数的数组,则可能如下所示:“ malloc(20 * sizeof(int))”,其中20是分配的元素数,sizeof(int)是您想要的类型的大小分配,如果成功,则返回指向已分配内存的指针;如果失败,则返回 空指针。