2015-03-01 2 views
0

Я использую компилятор LLVM для разработки на C++ в Xcode. Я инициализирую переменную char pickbuf и выделяю требуемую память, которую я хочу присвоить значению 1 ко второму коду строки. Но я получаю ошибку с нулевым указателем: пожалуйста, помогите мне.Тема 1: EXC_BAD_ACCESS (Code = 1, address = 0x0) issue genarated

2DCDP4.h

class CDP : public Const2DCDP{ 

    struct PICK 
     { 
      short x;   // Transverse connector 
      short y;   // Vertical direction consolidated 
      unsigned char x0; // Transverse reduction limit 
      unsigned char y0; // Longitudinal reduction limit 
     } ; 

    public: 

     char* pickbuf =new char[1]; // Overlapping buffer allocate some 
     PICK* pickup =new PICK [1];  // Backtrace buffer 

    } 
void getProjection(void); 
    }; 

2DCDP4.cpp

#include "2DCDP4.h" 

void CDP::getProjection(void){ 
char *before=pickbuf; 
if(before[(j-1)*di + (i-1)] == 1) //**Thread 1 : EXC_BAD_ACCESS (Code = 1, address = 0x0)** 
{ 
//code 
} 
} 

ответ

2

Вы не распределили всю память на pickbuf, но попытаться получить доступ к памяти в pickbuf на 2-й линии. Чтобы исправить это, выделить память для pickbuf до 2-й линии:

char pickbuf[n]; 

или

char* pickbuf = new char[n]; 

Где n является размер достаточно для вас необходим большой.

+0

Не могли бы вы найти мой отредактированный код. после выделения памяти, получающей ошибку. Большое спасибо, чувак. –

+1

@RehanK Вы пытаетесь получить доступ к массиву с индексом '(j-1) * di + (i-1)', и он сработает, поэтому '(j-1) * di + (i-1)' дает вам недопустимый индекс (т.е. меньше 0 или больше или равен размеру массива). Используйте отладчик LLVM, чтобы узнать, что '(j-1) * di + (i-1)' оценивает и почему. – emlai

+0

не могли бы вы проверить этот вопрос? Dude http://stackoverflow.com/questions/28832664/thread-1-exc-bad-access-code-2-address-0x8-error-c?noredirect=1# –

Смежные вопросы