簡體   English   中英

為什么我得到以下代碼 AddressSanitizer: SEGV on unknown address error

[英]why am i getting for the following code AddressSanitizer: SEGV on unknown address error

'''
#include<stack>
using namespace std;
class Solution {
public:
    bool isValid(string s) {
        stack<char> mystack;
        char c;

        for(int i=0;i<= s.length();i++){


            if(s[i]=='(' || s[i]=='{' || s[i]== '[')
                mystack.push(s[i]);
            if(i!=0){
            switch (s[i]){
               case ')':
                   if(mystack.top()== '(')
                       mystack.pop();
                   else return false;
               case '}':
                   if(mystack.top()== '{')
                       mystack.pop();
                   else return false;
               case ']':
                   if (mystack.top()== '[')
                       mystack.pop();
                   else return false;

           }
            }
            if(i==s.length() && !mystack.empty())
                return false;


        } 
        return true;
    }
};'''

我不知道為什么但我收到此錯誤AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x000000383dd4 bp 0x7ffc40c5d970 sp 0x7ffc40c5d970 sp 0x7ffc40c5d860 T0)提示**地址指向零頁**有人可以解釋為什么我得到這個以及如何解決這個問題。 提前致謝!

這段代碼包含很多錯誤。 但錯誤的原因實際上是在switch case的if條件內

if( mystack.top() )

在這里,我正在訪問堆棧的頂部元素,而不檢查它是否存在,因此是未知地址。 應該是

if( !mystack.empty() && mystack.top())

這是編譯器檢查您正在尋找的地址是否存在,如果它存在,它只會嘗試訪問該值。

我作為一個菜鳥程序員問過這個問題,經過幾個月的編程,我自己調試了這個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM