UndefinedBehaviorSanitizer:未定义行为

问题描述 投票:0回答:1

我正在尝试使用面向对象的 cpp 解决回文数问题。我在代码中遇到了一个奇怪的错误,显示“有符号整数溢出:-1734809184 * 10 无法用‘int’类型表示”。这是我的代码,我需要一些有用的帮助来通过测试用例。

class Solutiuon {
public:
    bool isPalindrome(int x) {
        int rev, temp;
        temp = x;
        while (x > 0) {
            rev = rev * 10 + (x % 10);
            x /= 10;
        }
        if(rev == temp)
            return true;
        else
            return false;
    }
};

使用我的代码,我希望它对于回文数返回 true,对于非回文数返回 false。

c++ oop palindrome
1个回答
1
投票

您正在经历经典的未定义行为。在您的代码中,变量

rev
在您访问
rev = rev * 10 + (x % 10)
中之前未初始化。

您应该首先将

rev
初始化为
0
显式。 C++ 不会自动为你做这件事。

作为补充说明,您的解决方案没有任何面向对象的内容。

© www.soinside.com 2019 - 2024. All rights reserved.