2014-02-16 42 views
0

从数组中打印元素会导致中止。中止消息表示无效的空指针。VS在打印字符串数组元素时中止 - C++

#include <iostream> 
#include <string> 

using namespace std; 

int main() 
{ 
    int day = 5, year = 2015; 

    const string months[13] = { 0, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; 

    cout << months[5] << " " << day << ", " << year << endl; 
} 

回答

1

std::basic_string<T>(T* arg)构造必须arg指着T数组被调用。

您正在构建std::string0,因此您的arg是空指针。这是未定义的行为(并且在Microsoft的实现中,它在调试模式下由assert进行检查;这就是您接收调试断言窗口的原因)。

例改写明确显示错误:

char* s = 0; 
std::string str(s); // string will try to access null pointer here 

必须要么删除此0从数组或使它成为一个字符串文字:"0"

请注意,C++是一种强类型语言。您可以只将相同类型或派生类型的对象存储在数组中。

0

什么是0在你的数组中做什么?

const string months[13] = { 0, "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" }; 
          ^^^ 

删除它,你应该没问题。

0

将0作为字符串“0”。 这会导致你的数组的第一个元素设置为空

然后重复,将达到5个元素被中断,导致NPE