std :: logic_error:basic_string :: _ s_construct null无效

时间:2015-03-14 21:19:49

标签: c++

我在这个程序中得到std::logic_error: basic_string::_s_construct null not valid。我怎么解决这个问题?我已经尝试了previously posted solution,但我自己无法纠正。

#include <iostream>
#include <stack>
#include <string>

using namespace std;

int main()
{
     stack<string> s;
     string temp, exp[] = "abc-+de-fg-h+/*";
     string ch1 = 0, ch2 = 0, ch = 0;
     int sizeExp = sizeof(exp)/sizeof(*exp);
     for(int i=0; i < sizeExp ; i++) {
         ch = exp[i];
         if (ch == "*" || ch == "/" || ch == "+" || ch == "-") {
             if (s.empty() && sizeof(temp) != sizeof(exp)) {
                 cout << "Error in Expression." << endl;
             }
             else {
                 if (sizeof(s.top()) != sizeof(char)){
                     ch1 = s.top();
                     s.pop();
                     ch2 = s.top();
                     temp = '(' + ch2 + ')' + exp[i] + '(' + ch1 + ')';
                     s.push(temp);
                 }
                 else {
                     ch1 = s.top();
                     s.pop();
                     ch2 = s.top();
                     temp = ch2 + exp[i] + ch1;
                     s.push(temp);
                 }
             }
         }
         else {
             s.push(exp[i]);
         }
     }
     cout << temp << endl << "Is your Infix Expression for ";
     cout << exp;
     return 0;
}

2 个答案:

答案 0 :(得分:7)

问题在于排序std::string str = 0;的陈述。这导致未定义的行为。使用std::string str = "";创建空字符串。

std::string str = 0;解析为constructor std::string::string(const char* s, const Allocator& alloc = Allocator())snullptr时,此构造函数的行为未定义。您对0的论点转换为nullptr

答案 1 :(得分:2)

std::string的文档清楚地表明您不应该从空指针构造一个。然而,在这里,你就是这样做的!

string ch1 = 0, ch2 = 0, ch = 0;  // BAD
string ch1, ch2, c;               // Substantially better