运行时错误:将非零偏移量 18446744073709551615 应用到空指针 (basic_string.h)

问题描述

我正在解决一个关于 leetcode 的问题,我必须将字符串相乘,但出现了我无法理解的错误

第 518 行:字符 69:运行时错误:将非零偏移 18446744073709551615 应用到空指针 (basic_string.h) 总结:UndefinedBehaviorSanitizer:undefined-behavior /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;

    }

链接:https://leetcode.com/problems/multiply-strings/

解决方法

import numpy as np

def summary(x):
      mean1 = np.mean(x)
      Dict = {"mean":mean1}
      return Dict

print(summary([1,2,3,4]))

print(summary([[1,2],[3,4]]))

不好。此函数返回字符串,因此 if(ans==""){ return 0; } 表示 return 0;

假设这里的 return string(0);std::string,构造函数

string

将用于此。

这表示请求将basic_string( const CharT* s,const Allocator& alloc = Allocator() ); (从nullptr转换而来)转换为字符串,但这是无效的。

你应该使用

0

相反。

,

对于 ans="" 的情况,
不是返回 "0" (string),而是返回 0 (Integer )。
由于返回类型是字符串,因此会导致问题。

if(ans=="")
{
   return "0";
}

我认为这应该可以正常工作。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...