我正在刷新我对C ++动态内存分配和结构的了解,并突然遇到了一些麻烦。下面是代码的一部分,它在3行之后停止执行并且程序终止。
int n;
std::cout << "How many hotels do you want : ";
std::cin >> n;
hotel* hotels= new (nothrow) hotel[n];
for (int i= 0; i< n; i++) {
std::cout << "Hotel " << i+1 << " name : ";
std::cin >> hotels[i].name;
std::cout << "Hotel " << i+1 << " rating : ";
std::cin >> hotels[i].rating;
std::cout << "Hotel " << i+1 << " stars : ";
std::cin >> hotels[i].stars;
}
这是“酒店”声明:
struct hotel {
char* name;
short int rating, stars;
};
我猜测“酒店”的动态声明有问题。我哪里出错?
答案 0 :(得分:0)
这里的问题是您需要在结构中为char* name
分配内存以存储字符。
如果您使用的是C ++(首选方式),也可以使用string
代替char *
:
struct hotel {
string name;
short int rating, stars;
};
答案 1 :(得分:0)
您需要包含new
才能使用nothrow
http://www.cplusplus.com/reference/new/nothrow/
#include <new> //std::nothrow
答案 2 :(得分:0)
在这里,您需要分配char*
。如果不是,您将有一个未定义的行为(通常是segFault
)
您的代码还有两件事:
您应该使用std::string
代替char*
。这是C ++中的一种更好的做法。 (至少在这种情况下):
#include <string>
struct hotel {
std::string name;
//^^^^^^^^^^^
short int rating, stars;
};
您可能还想使用std::vector
。