Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 地址消毒液:DEADLYSIGNAL_C++_Data Structures_Stack_Queue - Fatal编程技术网

C++ 地址消毒液:DEADLYSIGNAL

C++ 地址消毒液:DEADLYSIGNAL,c++,data-structures,stack,queue,C++,Data Structures,Stack,Queue,当我在leetcode中的以下代码中使用'st.pop'时,出现此错误: 地址消毒液:DEADLYSIGNAL ================================================================= ==31==错误:地址Sanitizer:SEGV位于未知地址pc 0x0000003a1925 bp 0x7ffd7b62dce0 sp 0x7ffd7b62dcd0 T0上 ==31==该信号是由读取内存访问引起的。 ==31==提示:此故障由高值地址

当我在leetcode中的以下代码中使用'st.pop'时,出现此错误:

地址消毒液:DEADLYSIGNAL ================================================================= ==31==错误:地址Sanitizer:SEGV位于未知地址pc 0x0000003a1925 bp 0x7ffd7b62dce0 sp 0x7ffd7b62dcd0 T0上 ==31==该信号是由读取内存访问引起的。 ==31==提示:此故障由高值地址的解引用引起。请参阅下面的寄存器值。分解提供的pc以了解使用了哪个寄存器。 8 0x7f3d81a1e0b2/lib/x86_64-linux-gnu/libc.so.6+0x270b2 AddressSanitizer无法提供其他信息。 ==31==中止 代码如下:

class Solution {
public:
    string removeOuterParentheses(string S) {
        stack<char> st;
        int count=0;
        string ns;
        for(int i=0;i<S.size();i++)
        {
            if(S[i] == 40 && count++ > 0)
            {
                st.push(S[i]);
                ns+=S[i];
            }
            if(S[i] == 41 && count-- > 0)
            {
                st.pop();
                ns+=S[i];
            }
        }
        return ns;
    }
};

如果您有一个输入字符串,那么您的条件S[i]==40&&count++>0将始终计算为false。当S[i]==为真时,则计数+++>0为假,因为计数在比较后增加。但是,计数会增加,因此第二个条件S[i]=&&count->0最终将为真。然后你打了圣波普。由于st为空,因此将导致问题


此外,如果您修复了代码,例如,通过编写S[i]==40&&&++count>0,它不会像名称所示删除括号。

如果您有一个输入字符串,则您的条件S[i]==40&&&count++>0将始终计算为false。当S[i]==为真时,则计数+++>0为假,因为计数在比较后增加。但是,计数会增加,因此第二个条件S[i]=&&count->0最终将为真。然后你打了圣波普。由于st为空,因此将导致问题


此外,如果您修复了代码,例如,通过编写S[i]==40&&&++count>0,它将不会像名称所示删除括号。

感谢您的帮助。它试图弹出一个空堆栈

错误-如果[i]==41&&count->0


更正-如果[i]==41&&count->1

谢谢您的帮助。它试图弹出一个空堆栈

错误-如果[i]==41&&count->0


更正-ifS[i]==41&&count->1

我猜调用st.pop时堆栈是空的。您可以通过添加一些代码行轻松地检查这一点。并显示调用RemoveOuterParenteSF的代码。首先,不要使用幻数。如果要查看某个字符是否为,请使用S[i]==。第二,如果弹出时堆栈为空会发生什么?看看如果输入为40、41会发生什么。count是递增的,但是在第一次迭代时堆栈中没有任何内容被推入,…@Damien,我故意不在第一次迭代中推入括号,因为我正在处理这个问题-删除最外层的括号。我猜调用st.pop时堆栈是空的。您可以通过添加一些代码行轻松地检查这一点。并显示调用RemoveOuterParenteSF的代码。首先,不要使用幻数。如果要查看某个字符是否为,请使用S[i]==。第二,如果弹出时堆栈为空会发生什么?看看如果输入为40、41会发生什么。计数是递增的,但在第一次迭代时堆栈中没有推送任何内容,…@Damien,我故意不在第一次迭代时推送括号,因为我正在处理这个问题-删除最外层的括号。