有人可以告诉我我的代码有什么问题吗?
Can someone please tell me what is wrong with my code?
我想通过向数组添加值并打印它们来操作指向结构数组的指针。
这是代码:
#include <iostream>
using namespace std;
struct words {
char letter;
bool marked;
};
int main(){
int ncols, nrows;
words* data;
data = new words [ncols * nrows];
cout << "Insert ncols : ";
cin >> ncols;
cout << "Insert nrows : ";
cin >> nrows;
data[0].letter = 'a';
data[1].letter = 'b';
data[2].letter = 'c';
data[3].letter = 'd';
for(int i = 0; i < (ncols*nrows); i++){
cout << (data+i)->letter << endl;
}
}
我收到此错误消息:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
我做错了什么?
简单错误。在 nrows
和 ncols
变量具有任何值之前,您使用了它们。显然你应该只在给定一个值后使用一个变量。
像这样更改您的代码
cout << "Insert ncols : ";
cin >> ncols;
cout << "Insert nrows : ";
cin >> nrows;
data = new words [ncols * nrows];
int ncols, nrows;
words* data;
data = new words [ncols * nrows];
这是未定义的行为。您的 ncols
和 nrows
未初始化 。稍后你会做:
cout << "Insert ncols : ";
cin >> ncols;
cout << "Insert nrows : ";
cin >> nrows;
初始化它们,但是您在 创建了 data
数组之后才这样做。在 new words [ncols * nrows]
行之后修改 ncols
和 nrows
不会更改该数组的大小 。这些值不受约束。它们用于创建数组。一次性工作。
要解决您的问题,请先初始化您的变量,然后再使用它们。
我想通过向数组添加值并打印它们来操作指向结构数组的指针。 这是代码:
#include <iostream>
using namespace std;
struct words {
char letter;
bool marked;
};
int main(){
int ncols, nrows;
words* data;
data = new words [ncols * nrows];
cout << "Insert ncols : ";
cin >> ncols;
cout << "Insert nrows : ";
cin >> nrows;
data[0].letter = 'a';
data[1].letter = 'b';
data[2].letter = 'c';
data[3].letter = 'd';
for(int i = 0; i < (ncols*nrows); i++){
cout << (data+i)->letter << endl;
}
}
我收到此错误消息:
terminate called after throwing an instance of 'std::bad_alloc'
what(): std::bad_alloc
我做错了什么?
简单错误。在 nrows
和 ncols
变量具有任何值之前,您使用了它们。显然你应该只在给定一个值后使用一个变量。
像这样更改您的代码
cout << "Insert ncols : ";
cin >> ncols;
cout << "Insert nrows : ";
cin >> nrows;
data = new words [ncols * nrows];
int ncols, nrows;
words* data;
data = new words [ncols * nrows];
这是未定义的行为。您的 ncols
和 nrows
未初始化 。稍后你会做:
cout << "Insert ncols : ";
cin >> ncols;
cout << "Insert nrows : ";
cin >> nrows;
初始化它们,但是您在 创建了 data
数组之后才这样做。在 new words [ncols * nrows]
行之后修改 ncols
和 nrows
不会更改该数组的大小 。这些值不受约束。它们用于创建数组。一次性工作。
要解决您的问题,请先初始化您的变量,然后再使用它们。