我想让用户输入一个整数来创建一个像这样的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。
答案 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]...
}