ошибка времени выполнения: применение ненулевого смещения 18446744073709551615 к нулевому указателю (basic_string.h)

Я решаю вопрос о leetcode, где мне нужно умножать строки, и я получил эту ошибку, которую не могу понять.

Строка 518: Char 69: ошибка времени выполнения: применение ненулевого смещения 18446744073709551615 к нулевому указателю (basic_string.h) ОБЗОР: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/ ../../../../include/С++/9/биты/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/


person pavan areti    schedule 30.03.2021    source источник
comment
Обратите внимание, что s1.length() - 1 не делает то, что вы думаете оно делает. Что произойдет, если s1.length() == 0?   -  person Evg    schedule 30.03.2021
comment
на самом деле в соответствии с вопросом гарантируется, что длина строки будет не менее 1;   -  person pavan areti    schedule 31.03.2021


Ответы (2)


       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";
       }

вместо.

person MikeCAT    schedule 30.03.2021

В случае, когда ans="",
вместо возврата "0" (строка) вы возвращаете 0 ( Целое число).
Поскольку возвращаемый тип является строкой, это вызывает проблему.

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

Это должно работать нормально, я думаю.

person Debi Prasad Sen    schedule 24.06.2021