动态结构数组提前终止

时间:2013-08-05 13:13:54

标签: c++ memory dynamic struct allocation

我正在刷新我对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;
};

我猜测“酒店”的动态声明有问题。我哪里出错?

3 个答案:

答案 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