如何创建一个void数组,其大小将由命令行的用户输入指定?

时间:2016-12-31 16:38:56

标签: c++ arrays visual-studio-2013 command-line

我想让用户输入一个整数来创建一个像这样的2D数组:

void* myArray_1[2][userInput];

编译器不允许

,因为userInput不是常量。

然后我尝试了这个:

void** myArray_2 = new void*[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new void[colCount];

会导致以下错误:

  

错误:不允许使用void数组。

如何创建一个void数组,其大小将由命令行的用户输入指定?

编辑:
我的功能原型是:
errorType EventGet ( EVENT_HANDLE hEvent, void * pBuffer);

我用过这个:

void* myArray_3[2][10];
...
myArray_3[0][count++] = myOtherArray[0]; //myOtherArray[0] contains a handle and myOtherArray is an 1D array with size of 2.
EventGet ( myEventHandle, myArray_3[0][i]);

我得到了正确的结果。现在我唯一想要的是允许用户指定第二个尺寸而不是10。

3 个答案:

答案 0 :(得分:3)

杀戮点不是传球,指点或任何同类,问题在于:

myArray_2[i] = new void[colCount];

new void[colCount];说“让我成为void的数组。” void是“无类型”的占位符,无法实例化。你实际上会创建一个没有任何数组。没有什么没有定义。没有尺寸。这是不可能做到的。

但是,OP希望复制Variable Length Array

void* myArray_1[2][userInput];

要做到这一点,OP需要进一步间接一级,并存储void *的二维数组(真正的数组数组)。

void*** myArray_2 = new void**[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new void*[colCount];

这将显示void* myArray_1[2][userInput];

的外观

首选的C ++方法是使用容器为您和use a std::vector管理内存:

std::vector<std::vector<void*>> myVector_1(2, std::vector<void*>(userInput));

定义vector,其中包含vector,其中包含指向void的指针。外部vector预设为2个元素,内部矢量预设为userInput个元素。

答案 1 :(得分:2)

显然你需要一个void*的数组。这与void的2D数组不同,因为您无法将void数组分配为错误状态。第一级是正确的:

void** myArray_2 = new void*[rowCount];

但是,必须使用有效类型(例如

)分配第二级
void** myArray_2 = new void*[rowCount];
for(int i = 0; i < rowCount; ++i)
    myArray_2[i] = new int[colCount];

当然,您可以添加除int以外的任何类型。如果需要,您也可以混合使用类型。

答案 2 :(得分:1)

根据Igor Tandetnik所评论的内容,并且考虑到你知道外部大小是常数2,你可以做类似的事情:

std::vector<void*> myArray[2] = {
  std::vector<void*>(userInput), std::vector<void*>(userInput)
};

for (int i = 0; i < userInput; ++i) {
  work on myArray[0][i]...
  work on myArray[1][i]...
}