leetcode 오류의 ERROR: AddressSanitizer: stack-overflow on address...

오보 내용

AddressSanitizer:DEADLYSIGNAL
=================================================================
==45==ERROR: AddressSanitizer: stack-overflow on address 0x7ffc1b6a1ff8 (pc 0x7f71b6e7d3e0 bp 0x000000000010 sp 0x7ffc1b6a1fe0 T0)
    #0 0x7f71b6e7d3df  (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x2b3df)
    #1 0x7f71b6e7daaa  (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x2baaa)
    #2 0x7f71b6e7a046  (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x28046)
    #3 0x7f71b6f5e04e in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10c04e)
SUMMARY: AddressSanitizer: stack-overflow (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x2b3df) 
==45==ABORTING

번역하다


창고가 넘쳐흐르다.

원인


귀속의 깊이가 너무 높다.
귀속법 해결 방안의 장점은 실현하기 쉽다는 것이다.그러나 귀속의 깊이가 너무 높으면 우리는 당할 수 있다는 큰 단점이 있다 .

해결 방법


실현 방법을 바꾸다.
시나리오는 다음과 같습니다.
  • BFS 사용;
  • 현식 창고를 사용하여 DFS를 실현한다

  • 해결 방법 관련


    BFS 코드 템플릿


    Java 위조 코드
    /**
     * Return the length of the shortest path between root and target node.
     */
    int BFS(Node root, Node target) {
        Queue<Node> queue;  // store all nodes which are waiting to be processed
        int step = 0;       // number of steps neeeded from root to current node
        // initialize
        add root to queue;
        // BFS
        while (queue is not empty) {
            step = step + 1;
            // iterate the nodes which are already in the queue
            int size = queue.size();
            for (int i = 0; i < size; ++i) {
                Node cur = the first node in queue;
                return step if cur is target;
                for (Node next : the neighbors of cur) {
                    add next to queue;
                }
                remove the first node from queue;
            }
        }
        return -1;          // there is no path from root to target
    }
    

    현식 스택 코드 템플릿


    Java 위조 코드
    /*
     * Return true if there is a path from cur to target.
     */
    boolean DFS(int root, int target) {
        Set<Node> visited;
        Stack<Node> s;
        add root to s;
        while (s is not empty) {
            Node cur = the top element in s;
            return true if cur is target;
            for (Node next : the neighbors of cur) {
                if (next is not in visited) {
                    add next to s;
                    add next to visited;
                }
            }
            remove cur from s;
        }
        return false;
    }
    

    도움이 된다면 주문하세요~

    좋은 웹페이지 즐겨찾기