leetcode 오류 보고의 ERROR: AddressSanitizer: attempting double-free on 0x7fa0cd690800 in thread T0:...
11380 단어 오류 보고에 관하여
배경
#173 두 갈래 검색 트리 교체기를 쓸 때 다음과 같은 오류가 발생했습니다.
오보 내용 =================================================================
==45==ERROR: AddressSanitizer: attempting double-free on 0x7fa0cd690800 in thread T0:
#0 0x7fa0cca11b8f in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bb8f)
#4 0x7fa0cb9f682f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
0x7fa0cd690800 is located 0 bytes inside of 400008-byte region [0x7fa0cd690800,0x7fa0cd6f2288)
freed by thread T0 here:
#0 0x7fa0cca11b8f in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bb8f)
#4 0x7fa0cb9f682f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
previously allocated by thread T0 here:
#0 0x7fa0cca11f88 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bf88)
#5 0x7fa0cb9f682f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
SUMMARY: AddressSanitizer: double-free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bb8f) in __interceptor_free
==45==ABORTING
번역하다
그가 무작정 잘못 보고한 정보를 번역해 보아라.ERROR: AddressSanitizer: attempting double-free
:
실제 작업
석방이 키워드는 우리의 코드가 방출될 때 문제가 생겼다는 것을 설명한다.
그래서 우리는free () 함수가 있는 곳을 찾았다.void bSTIteratorFree(BSTIterator* obj) {
free(obj->val);
free(obj);
}
언뜻 봐도 문제없잖아. 안에 있는 데이터 결과(여기는 1차원 그룹val)를 먼저 방출한 다음에 전체 구조체 변수를 방출해.
그런데 다시 생각해 보니 문제가 생겼다.만약 obj->val
자체가 비어 있다면?이때 어디에서 왔습니까obj->val
?망치를 풀어볼까?
설명하자면, BSTIterator는 창고입니다. obj->top은 창고 꼭대기 바늘입니다.
그래서 obj->val을 방출하기 전에 판단을 했습니다. 다음과 같습니다.void bSTIteratorFree(BSTIterator* obj) {
if(obj->val) free(obj->val);
free(obj);
}
그러나 이때 발견할 수 있듯이 전A도 할 수 없다.
다시 한 번 생각해 보면 구조체 변수obj
가 그 자체가 존재하지 않는다면 어떻게 된 것인가obj->val
?
따라서 다음과 같이 수정됩니다.void bSTIteratorFree(BSTIterator* obj) {
if(obj && obj->val) free(obj->val);
free(obj);
}
이렇게 하면 위의 오보 문제를 해결하고 문제를 완성할 수 있다.제목이 뭔지 보고 싶어요?전송문을 눌러주세요
후기
다음과 같은 문장:BSTIterator* obj = (BSTIterator *)malloc(sizeof(BSTIterator));
if(!obj) return NULL;
obj->top = 0;
두 번째 줄의 판단 문장은 있어도 되고 없어도 되는 것 같지만 메모리 공간 분배에 실패하면?
이렇게 되면obj는 아직 빈 바늘일 뿐인데 또 무슨 일이야obj->top
?
이상 판단, 습관 기르기.
만약 우리가 좋은 습관을 길렀다면, 잘못을 보고할 확률이 어찌 많이 떨어지지 않겠는가?
자성, 자성!
만약 당신에게 도움이 된다면.(이것은 강렬한 암시였다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
leetcode 오류의 ERROR: AddressSanitizer: stack-overflow on address...
창고가 넘쳐흐르다.
귀속의 깊이가 너무 높다.
귀속법 해결 방안의 장점은 실현하기 쉽다는 것이다.그러나 귀속의 깊이가 너무 높으면 우리는 당할 수 있다는 큰 단점이 있다堆栈溢出 .
실현 방법을 바꾸다.
시나리오는 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
=================================================================
==45==ERROR: AddressSanitizer: attempting double-free on 0x7fa0cd690800 in thread T0:
#0 0x7fa0cca11b8f in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bb8f)
#4 0x7fa0cb9f682f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
0x7fa0cd690800 is located 0 bytes inside of 400008-byte region [0x7fa0cd690800,0x7fa0cd6f2288)
freed by thread T0 here:
#0 0x7fa0cca11b8f in __interceptor_free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bb8f)
#4 0x7fa0cb9f682f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
previously allocated by thread T0 here:
#0 0x7fa0cca11f88 in malloc (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bf88)
#5 0x7fa0cb9f682f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
SUMMARY: AddressSanitizer: double-free (/usr/lib/x86_64-linux-gnu/libasan.so.5+0x10bb8f) in __interceptor_free
==45==ABORTING
번역하다
그가 무작정 잘못 보고한 정보를 번역해 보아라.ERROR: AddressSanitizer: attempting double-free
:
실제 작업
석방이 키워드는 우리의 코드가 방출될 때 문제가 생겼다는 것을 설명한다.
그래서 우리는free () 함수가 있는 곳을 찾았다.void bSTIteratorFree(BSTIterator* obj) {
free(obj->val);
free(obj);
}
언뜻 봐도 문제없잖아. 안에 있는 데이터 결과(여기는 1차원 그룹val)를 먼저 방출한 다음에 전체 구조체 변수를 방출해.
그런데 다시 생각해 보니 문제가 생겼다.만약 obj->val
자체가 비어 있다면?이때 어디에서 왔습니까obj->val
?망치를 풀어볼까?
설명하자면, BSTIterator는 창고입니다. obj->top은 창고 꼭대기 바늘입니다.
그래서 obj->val을 방출하기 전에 판단을 했습니다. 다음과 같습니다.void bSTIteratorFree(BSTIterator* obj) {
if(obj->val) free(obj->val);
free(obj);
}
그러나 이때 발견할 수 있듯이 전A도 할 수 없다.
다시 한 번 생각해 보면 구조체 변수obj
가 그 자체가 존재하지 않는다면 어떻게 된 것인가obj->val
?
따라서 다음과 같이 수정됩니다.void bSTIteratorFree(BSTIterator* obj) {
if(obj && obj->val) free(obj->val);
free(obj);
}
이렇게 하면 위의 오보 문제를 해결하고 문제를 완성할 수 있다.제목이 뭔지 보고 싶어요?전송문을 눌러주세요
후기
다음과 같은 문장:BSTIterator* obj = (BSTIterator *)malloc(sizeof(BSTIterator));
if(!obj) return NULL;
obj->top = 0;
두 번째 줄의 판단 문장은 있어도 되고 없어도 되는 것 같지만 메모리 공간 분배에 실패하면?
이렇게 되면obj는 아직 빈 바늘일 뿐인데 또 무슨 일이야obj->top
?
이상 판단, 습관 기르기.
만약 우리가 좋은 습관을 길렀다면, 잘못을 보고할 확률이 어찌 많이 떨어지지 않겠는가?
자성, 자성!
만약 당신에게 도움이 된다면.(이것은 강렬한 암시였다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
leetcode 오류의 ERROR: AddressSanitizer: stack-overflow on address...
창고가 넘쳐흐르다.
귀속의 깊이가 너무 높다.
귀속법 해결 방안의 장점은 실현하기 쉽다는 것이다.그러나 귀속의 깊이가 너무 높으면 우리는 당할 수 있다는 큰 단점이 있다堆栈溢出 .
실현 방법을 바꾸다.
시나리오는 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
ERROR: AddressSanitizer: attempting double-free
:
석방이 키워드는 우리의 코드가 방출될 때 문제가 생겼다는 것을 설명한다.
그래서 우리는free () 함수가 있는 곳을 찾았다.
void bSTIteratorFree(BSTIterator* obj) {
free(obj->val);
free(obj);
}
언뜻 봐도 문제없잖아. 안에 있는 데이터 결과(여기는 1차원 그룹val)를 먼저 방출한 다음에 전체 구조체 변수를 방출해.
그런데 다시 생각해 보니 문제가 생겼다.만약
obj->val
자체가 비어 있다면?이때 어디에서 왔습니까obj->val
?망치를 풀어볼까?설명하자면, BSTIterator는 창고입니다. obj->top은 창고 꼭대기 바늘입니다.
그래서 obj->val을 방출하기 전에 판단을 했습니다. 다음과 같습니다.
void bSTIteratorFree(BSTIterator* obj) {
if(obj->val) free(obj->val);
free(obj);
}
그러나 이때 발견할 수 있듯이 전A도 할 수 없다.
다시 한 번 생각해 보면 구조체 변수
obj
가 그 자체가 존재하지 않는다면 어떻게 된 것인가obj->val
?따라서 다음과 같이 수정됩니다.
void bSTIteratorFree(BSTIterator* obj) {
if(obj && obj->val) free(obj->val);
free(obj);
}
이렇게 하면 위의 오보 문제를 해결하고 문제를 완성할 수 있다.제목이 뭔지 보고 싶어요?전송문을 눌러주세요
후기
다음과 같은 문장:BSTIterator* obj = (BSTIterator *)malloc(sizeof(BSTIterator));
if(!obj) return NULL;
obj->top = 0;
두 번째 줄의 판단 문장은 있어도 되고 없어도 되는 것 같지만 메모리 공간 분배에 실패하면?
이렇게 되면obj는 아직 빈 바늘일 뿐인데 또 무슨 일이야obj->top
?
이상 판단, 습관 기르기.
만약 우리가 좋은 습관을 길렀다면, 잘못을 보고할 확률이 어찌 많이 떨어지지 않겠는가?
자성, 자성!
만약 당신에게 도움이 된다면.(이것은 강렬한 암시였다)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
leetcode 오류의 ERROR: AddressSanitizer: stack-overflow on address...
창고가 넘쳐흐르다.
귀속의 깊이가 너무 높다.
귀속법 해결 방안의 장점은 실현하기 쉽다는 것이다.그러나 귀속의 깊이가 너무 높으면 우리는 당할 수 있다는 큰 단점이 있다堆栈溢出 .
실현 방법을 바꾸다.
시나리오는 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.
BSTIterator* obj = (BSTIterator *)malloc(sizeof(BSTIterator));
if(!obj) return NULL;
obj->top = 0;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
leetcode 오류의 ERROR: AddressSanitizer: stack-overflow on address...창고가 넘쳐흐르다. 귀속의 깊이가 너무 높다. 귀속법 해결 방안의 장점은 실현하기 쉽다는 것이다.그러나 귀속의 깊이가 너무 높으면 우리는 당할 수 있다는 큰 단점이 있다堆栈溢出 . 실현 방법을 바꾸다. 시나리오는 다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.