2013-04-01 2 views
0

как название говорит, что я эту ошибку я был бы весьма признателен мне помочь Мой код нижеТема 1: Программа получила сигнал: «EXC_BAD_ACCESS»

это в BTscan.c

t_btmanager  *bt_accessor(t_btmanager *tmp) 
{ 
static t_btmanager *bt_tmp = 0; 
if (tmp) 
bt_tmp = tmp; 
return (bt_tmp); 
} 

int bt_scan() 

{ 
bt_accessor(0)->status = 1; ////Here's the problem 
printf("registering hooks ...\n"); 
return (0); 
} 

и это один в BTscan.h

typedef struct s_btmanager 
{ 
char  status; 
}  t_btmanager; 

Спасибо за вашу помощь

+0

... Вы когда-нибудь инициализировали свой 'bt_accessor' реальным' t_btmanager'? Я могу представить, что если вы никогда этого не сделаете, 'bt_tmp' будет всегда иметь значение null, и попытка получить« статус »нулевого указателя даст вам вашу ошибку. – Xymostech

ответ

2

bt_tmp останется 0 если tmp - 0. Таким образом, это будет NULL Указатель и разыменование нулевой указатель bt_accessor(0)->status вызовет исключение. Поскольку доступ к адресу памяти 0x0 запрещен.

Я не уверен, где возникает исключение EXC_BAD_ACCESS, но я предполагаю, что оно происходит из диспетчера виртуальной памяти ядра Mach.

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