首页 > 解决方案 > 运行时错误:基数为 0x000000000000 的指针索引表达式溢出到 0xffffffffffffffff (basic_string.h)

问题描述

问题是在字符串数组中找到最大的公共前缀字符串。

示例 1:

输入:["flower","flow","flight"]

输出:“fl”

这是我到目前为止所尝试的。

class Solution {
public:
string longestCommonPrefix(const vector<string>& v) {
    if ( v.empty() )
     {
        return 0;
     }
   string  smin = *min_element(v.begin(), v.end(), 
                 [] (const std::string& s1, const std::string& s2) { 
                     return s1.length() < s2.length(); }
                 );
    string str="";
    int i,j;
    for(i=0; i<smin.size(); i++){
        str+=smin[i];
        for(j=0; j<v.size(); j++){
            if(v[j].find(str)==string::npos){                    
                str=str.substr(0, str.length() - 1);
                return str;
            }                
        }
    }
    return str;
}
};

预期结果已作为上面的示例给出。

我得到的错误消息是-:

Runtime error: pointer index expression with base 0x000000000000 overflowed to 0xffffffffffffffff

我已经为此研究了类似的答案并尝试实现它们,但错误并没有发生。请有人帮我解决这个问题。

标签: c++string

解决方案


向量中有一个空字符串。在某些时候,您计算长度减 1。然后将其用于结束索引 substr。

一般来说,您需要学习使用调试器,它会准确地告诉您错误发生在哪一行以及该行上的变量是什么样的。


推荐阅读