문제

한동안 검색했지만 왜 이것이 버스 오류가 발생하는지 알 수 없습니다.

어떤 도움이든 큰 감사를드립니다.

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"는 앞으로 이런 종류의 것을 추적하는 데 도움이 될 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top