"خطأ الناقل" الوصول إلى مجموعة <كثافة> من البنية

StackOverflow https://stackoverflow.com/questions/601680

  •  03-07-2019
  •  | 
  •  

سؤال

وبتفتيش لفترة من الوقت، ولكن لا أستطيع معرفة لماذا هذا من شأنه رفع خطأ الحافلة.

وأي مساعدة سيكون محل تقدير كبير.

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;
}

ملحوظة أيضا أن "الخطأ حافلة" عادة ما تعني "ذاكرة المنحرفة قراءة". وهذا يعني، في محاولة لتحميل int32 من عنوان 0x1001 يؤدي إلى خطأ حافلة على العديد من أبنية (لأن حمولة 32-بت كلمة المرجع يتوقع عنوان الانحياز). التي عادة ما تكون الهبة التي كنت تحاول dereference مؤشر وهمية.

وموريس ومسمر بوضوح السبب الرئيسي للمشكلة هنا، ولكن التفكير "خطأ حافلة" -> "مؤشر وهمية" يمكن أن تساعد في تتبع هذا النوع من الشيء عليها في المستقبل

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top