二维数组教科书示例中的错误 (std::bad_array_new_length)(绝对 C++,Savitch)
Error (std::bad_array_new_length) in a 2d array textbook example (Absolute C++, Savitch)
这是来自 Walter Savitch 的 Absolute C++ 的教科书示例:
我尝试了不同的版本但出现了错误,所以我试着准确地输入代码:
#include <iostream>
using namespace std;
typedef int* IntArrayPtr;
int main()
{
int d1, d2;
cout << "Enter dimensions (row*col): \n";
cin >> d1, d2;
IntArrayPtr *m = new IntArrayPtr[d1]; //Get me a d1 sized array of pointers
int i,j;
for(i=0; i<d1; i++)
m[i] = new int[d2]; //each element in the array should be an array of size d2
//m is now a d1*d2 array
cout << "Enter " << d1 << " rows of " << d2 << " integers:\n";
for(i=0;i<d1;i++)
for(j=0;j<d2;j++)
cin >> m[i][j];
cout << "Your arry:\n";
for(i=0;i<d1;i++)
{for(j=0;j<d2;j++)
cout << m[i][j] << " ";
cout << endl;
}
for (i = 0; i < d1; i++)
delete m[i]; //delete each pointer
delete[] m; //delete the master pointer
return 0;
}
而当我尝试运行文中的例子时,我一输入维度就出错了。
谁能帮我找出问题所在?到目前为止,这本教科书中的示例没有发生其他错误。
您的错误可能在这一行:cin >> d1, d2;
应该是cin >> d1 >> d2;
编译时设置了少量警告标志,-Wall -Wextra
在我的例子中,会立即向您显示这一点。
这是我收到的警告:
main.cpp:9:16: warning: expression result unused [-Wunused-value]
cin >> d1, d2;
^~
1 warning generated.
通过使用 the comma operator,是的,这是一回事,您将丢弃其中一个输入,而不是创建您认为的大小的数组。
这是来自 Walter Savitch 的 Absolute C++ 的教科书示例:
我尝试了不同的版本但出现了错误,所以我试着准确地输入代码:
#include <iostream>
using namespace std;
typedef int* IntArrayPtr;
int main()
{
int d1, d2;
cout << "Enter dimensions (row*col): \n";
cin >> d1, d2;
IntArrayPtr *m = new IntArrayPtr[d1]; //Get me a d1 sized array of pointers
int i,j;
for(i=0; i<d1; i++)
m[i] = new int[d2]; //each element in the array should be an array of size d2
//m is now a d1*d2 array
cout << "Enter " << d1 << " rows of " << d2 << " integers:\n";
for(i=0;i<d1;i++)
for(j=0;j<d2;j++)
cin >> m[i][j];
cout << "Your arry:\n";
for(i=0;i<d1;i++)
{for(j=0;j<d2;j++)
cout << m[i][j] << " ";
cout << endl;
}
for (i = 0; i < d1; i++)
delete m[i]; //delete each pointer
delete[] m; //delete the master pointer
return 0;
}
而当我尝试运行文中的例子时,我一输入维度就出错了。
谁能帮我找出问题所在?到目前为止,这本教科书中的示例没有发生其他错误。
您的错误可能在这一行:cin >> d1, d2;
应该是cin >> d1 >> d2;
编译时设置了少量警告标志,-Wall -Wextra
在我的例子中,会立即向您显示这一点。
这是我收到的警告:
main.cpp:9:16: warning: expression result unused [-Wunused-value]
cin >> d1, d2;
^~
1 warning generated.
通过使用 the comma operator,是的,这是一回事,您将丢弃其中一个输入,而不是创建您认为的大小的数组。