구조물에서 세트 에 액세스하는 "버스 오류"
문제
한동안 검색했지만 왜 이것이 버스 오류가 발생하는지 알 수 없습니다.
어떤 도움이든 큰 감사를드립니다.
typedef struct {
set<int> pages;
} someStruct;
...
void someFunction() {
...
someStruct *a = createSomeStruct(); // just mallocs and returns
a->pages.insert(5);
...
}
해결책
Malloc은 할당하는 메모리를 초기화하지 않습니다. 새로 시도하십시오.
다른 팁
어떤 이유로 든 Malloc을 사용해야한다면 세트를 초기화 할 수 있습니다.
typedef struct {
set<int> pages;
} someStruct;
...
void someFunction() {
...
someStruct *a = createSomeStruct();
a->pages.insert(5);
...
}
...
someStruct *createSomeStruct(void) {
someStruct *a = (someStruct *) malloc(sizeof(*a));
new(&a->pages) set<int>;
return a;
}
또한 "버스 오류"는 일반적으로 "잘못 정렬 된 메모리 읽기"를 의미합니다. 즉, 주소 0x1001에서 Int32를로드하려고하면 많은 아키텍처에서 버스 오류가 발생합니다 (로드 -32 비트 단어 OP가 정렬 된 주소를 기대하기 때문입니다). 그것은 일반적으로 가짜 포인터를 피하려고하는 경품입니다.
Maurice는 여기서 문제의 주요 원인을 분명히 정리했지만 "버스 오류" -> "Bogus Pointer"는 앞으로 이런 종류의 것을 추적하는 데 도움이 될 수 있습니다.
제휴하지 않습니다 StackOverflow