runtime error: applying non-zero offset 18446744073709551615 to null pointer (basic_string.h)
runtime error: applying non-zero offset 18446744073709551615 to null pointer (basic_string.h)
我正在解决一个关于 leetcode 的问题,其中我必须将字符串相乘,但我遇到了这个我无法理解的错误
第 518 行:字符 69:运行时错误:将非零偏移量 18446744073709551615 应用于空指针 (basic_string.h)
摘要:UndefinedBehaviorSanitizer:未定义行为/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h: 527:69
这是我的代码
string multiply(string s1, string s2) {
vector<int> vec(s1.length()+s2.length(),0);
for(int i=s2.length()-1;i>=0;i--){
for(int j=s1.length()-1;j>=0;j--){
int pro = (s1[j]-'0')*(s2[i]-'0') ;
//borrow sent to next
int sum = vec[i+j+1] + pro;
vec[i+j+1] = (sum%10);
vec[i+j] += (sum/10);
}
}
string ans="";
for(int i=0; i<(s1.length()+s2.length());i++){
if(ans=="" && vec[i]==0){
continue;
}
ans.push_back(vec[i]+'0');
}
if(ans==""){
return 0;
}
return ans;
}
if(ans==""){
return 0;
}
不好。此函数返回字符串,因此 return 0;
表示 return string(0);
.
假设这里的string
是std::string
,构造函数
basic_string( const CharT* s,
const Allocator& alloc = Allocator() );
将用于此。
意思是请求将nullptr
(由0
转换而来)转成字符串,但是这个是无效的
你应该使用
if(ans==""){
return "0";
}
相反。
对于ans=""
的情况,
而不是 returning "0"
(string),你 returning 0
(整数)。
由于 return 类型是字符串,因此会导致问题。
if(ans=="")
{
return "0";
}
我认为这应该可以正常工作。
我正在解决一个关于 leetcode 的问题,其中我必须将字符串相乘,但我遇到了这个我无法理解的错误
第 518 行:字符 69:运行时错误:将非零偏移量 18446744073709551615 应用于空指针 (basic_string.h) 摘要:UndefinedBehaviorSanitizer:未定义行为/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h: 527:69
这是我的代码
string multiply(string s1, string s2) {
vector<int> vec(s1.length()+s2.length(),0);
for(int i=s2.length()-1;i>=0;i--){
for(int j=s1.length()-1;j>=0;j--){
int pro = (s1[j]-'0')*(s2[i]-'0') ;
//borrow sent to next
int sum = vec[i+j+1] + pro;
vec[i+j+1] = (sum%10);
vec[i+j] += (sum/10);
}
}
string ans="";
for(int i=0; i<(s1.length()+s2.length());i++){
if(ans=="" && vec[i]==0){
continue;
}
ans.push_back(vec[i]+'0');
}
if(ans==""){
return 0;
}
return ans;
}
if(ans==""){
return 0;
}
不好。此函数返回字符串,因此 return 0;
表示 return string(0);
.
假设这里的string
是std::string
,构造函数
basic_string( const CharT* s,
const Allocator& alloc = Allocator() );
将用于此。
意思是请求将nullptr
(由0
转换而来)转成字符串,但是这个是无效的
你应该使用
if(ans==""){
return "0";
}
相反。
对于ans=""
的情况,
而不是 returning "0"
(string),你 returning 0
(整数)。
由于 return 类型是字符串,因此会导致问题。
if(ans=="")
{
return "0";
}
我认为这应该可以正常工作。