【发布时间】:2021-01-16 00:25:28
【问题描述】:
我正在尝试定义一个二维数组,但我想在一个函数中进行,
这是我的代码:
int** createArray( int columns, int rows)
{
int** array[rows];
for(int i = 0; i < rows; i++)
{
array[i] = new int*[columns];
}
for(int i = 0; i <columns; i++)
{
for(int j = 0; j < rows; j++)
{
array[i][j] = 0;
std::cout <<array[i][j];
}
std::cout<<"\n";
}
return *array;
}
int main()
{
int **myArray = createArray(3,5);
for(int k =0; k < 5; k++)
{
if( (myArray[0][k] == 0) && (&myArray[1][k] == 0)) //segmentation fault
{
myArray[2][k] = 10; //segmentation fault
}
delete[] myArray;
}
但它会导致错误,可以看作是行中的 cmets。我是 C++ 新手,我不知道如何解决这个问题。
非常感谢
【问题讨论】:
-
错误是不言自明的。您提到了
int作为createArray函数的返回类型(看看如何编写函数签名)。将其更改为变量array的类型 -
谢谢,但正如我所说,我是 C++ 新手,所以对我来说这个错误不是不言自明的,我该如何解决?我试图将函数类型更改为 void 但现在我无法为创建的数组命名
-
@Cherubim 所说的是将
createArray的返回类型更改为int**。您必须始终归还您承诺归还的东西! -
@Botje 除了
createArray中的array不是int**也不能转换成那个。 -
@Mechatrnk 请不要自己惹
new和delete。这不是 C++ 的意图,而是标准容器类(即std::vector<T>、std::array<T,Size>)的用途。