抛出 'std::logic_error' basic_string::_S_construct null 无效的实例后调用的终止


string Solution::findDigitsInBinary(int A) {
int i, j, rem;
if(A == 0) {
return 0;
}
else {
string res="";
while(A > 0) {
rem = A % 2;
res = res + to_string(rem);
A = A / 2;
}
return std::string(res.rbegin(), res.rend());
}
}

如何解决此问题

该问题由以下原因引起:

if(A == 0) {
return 0;
}

A == 0时,它试图从0构造一个std::string。这等于 - 因为隐式构造函数调用 - 到:

return std::string(0);

在这种情况下,0表示非法的空指针。错误消息

basic_string::_M_construct空无效

意思完全一样。

如果您希望在A == 0时返回零,可以通过将return 0更改为:

return "0";

>return 0;调用隐式字符串构造函数,接受指向字符return std::string(const char *(0))的指针。此指针不允许为空。要返回空字符串,请写return std::string();

由于该方法应返回std::string因此,如果A == 0true,则返回std::string(0)~std::string(NULL)

要返回std::string的默认值 - 我猜 - 只需return std::string();而不是return 0;.

相关内容

最新更新