为什么我仅在leetcode中遇到此运行时错误,但编辑器却没有,效果很好

发布于 2025-02-10 23:19:41 字数 1368 浏览 2 评论 0原文

我的代码:

class Solution {
    public:
    string longestPalindrome(string s) {
    string tmp ="", res = "",emp = "";
    int leftptr =0,rightptr=0;
     while(rightptr < s.size())
    {
       if(leftptr == rightptr || s[rightptr] != s[leftptr])
       {
           if(s[rightptr] ==  s[rightptr - 1] && s.size()>0)
           {
               if(emp.size() == 0)
               {
                   emp.push_back(s[rightptr - 1]);
                   emp.push_back(s[rightptr]);
               }
               else
               {
                   emp.push_back(s[rightptr]);
               }
           }
           tmp.push_back(s[rightptr++]);
       }
       else if(s[leftptr] == s[rightptr])
       {
           tmp.push_back(s[rightptr]);
           if(res.size() < tmp.size()){
            res = "";
            res = tmp;
            tmp = "";
           }
           tmp.push_back(s[++leftptr]);
       }
   }
   if(res.size() > emp.size())
        return res;
   else
        return emp;   
    }
    };

错误:

行1061:char 9:运行时错误:添加无符号偏移到0x7fff3d1ffc60溢出到0x7fff3d1ffc5f(basic_string.h) 摘要:undefinedbehaviorsanitizer:undefined-behavior/usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../../../../../../ include/c+++++++++++++++++++++++++++++++++++++++++++++++++sctring.hbasic_string.h.h :1070:9

My Code :

class Solution {
    public:
    string longestPalindrome(string s) {
    string tmp ="", res = "",emp = "";
    int leftptr =0,rightptr=0;
     while(rightptr < s.size())
    {
       if(leftptr == rightptr || s[rightptr] != s[leftptr])
       {
           if(s[rightptr] ==  s[rightptr - 1] && s.size()>0)
           {
               if(emp.size() == 0)
               {
                   emp.push_back(s[rightptr - 1]);
                   emp.push_back(s[rightptr]);
               }
               else
               {
                   emp.push_back(s[rightptr]);
               }
           }
           tmp.push_back(s[rightptr++]);
       }
       else if(s[leftptr] == s[rightptr])
       {
           tmp.push_back(s[rightptr]);
           if(res.size() < tmp.size()){
            res = "";
            res = tmp;
            tmp = "";
           }
           tmp.push_back(s[++leftptr]);
       }
   }
   if(res.size() > emp.size())
        return res;
   else
        return emp;   
    }
    };

error :

Line 1061: Char 9: runtime error: addition of unsigned offset to 0x7fff3d1ffc60 overflowed to 0x7fff3d1ffc5f (basic_string.h)
SUMMARY: UndefinedBehaviorSanitizer: undefined-behavior /usr/bin/../lib/gcc/x86_64-linux-gnu/9/../../../../include/c++/9/bits/basic_string.h:1070:9

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

趁微风不噪 2025-02-17 23:19:41

您从零开始,然后尝试获取s [rightptr -1],即s [-1] - of Out array bunds访问。数组正在启动,第一个数组char位于偏移0x7fff3d1ffc60上,在offset 0x7fff3d1ffc5f上读取char-错误在说什么。

You start with zeros and attempt to get s[rightptr - 1] that is s[-1] - the out of array bounds access. The array is starting, the first array char is located at the offset 0x7fff3d1ffc60, reading a char at offset 0x7fff3d1ffc5f - what the error is saying.

ゝ偶尔ゞ 2025-02-17 23:19:41

首先通过循环的时间,rightptr设置为零,您评估s [rightptr -1]。这不会很好地结束:-)

我建议您将第二个如果语句更改为

if((rightptr > 0) && (s[rightptr] == s[rightptr - 1]) && (s.size() > 0))

从那里开始调试。可能还有其他问题,但至少可以解决直接问题。

The first time through your loop, rightptr is set to zero and you evaluate s[rightptr - 1]. That's not going to end well :-)

I suggest you change your second if statement to

if((rightptr > 0) && (s[rightptr] == s[rightptr - 1]) && (s.size() > 0))

and start debugging from there. There may be other problems but at least that'll solve the immediate one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文