2013-05-02 7 views
2

Компилятор показал следующие предупреждения для следующего сегмента кода. Пожалуйста, помогите мне исправить это.Почему я получаю эти предупреждения?

если ((tmp_n = (структура точка *) Shmat (shm_net, NULL, 0)) == (*) -1 ИНТ) {}
предупреждение: сравнение различных типов указателей не хватает слепок [включен по умолчанию]

Его программа на C, этот сегмент кода предназначен для присоединения сегмента разделяемой памяти к указателю ** tmp_n, который имеет тип struct dot.

struct dot {int weight; int tmv;};

+0

Я не уверен, насколько ясен этот предупреждающий сигнал. Вы сравниваете разные типы указателей, не отбрасывая их на обычный тип. – Cairnarvon

ответ

3

Попробуйте один

if((tmp_n = (struct dot *)shmat(shm_net, NULL, 0)) == (void *) -1) { } 

и посмотреть на man-page, говорится:

Return Value 
On success shmat() returns the address of the attached shared memory segment; 
on error (void *) -1 is returned, and errno is set to indicate the cause of the error. 
+0

Добро пожаловать! Если у вас есть сомнения, рассмотрите man-страницы! –

+0

Но (int *) -1 работал в моей другой программе без каких-либо предупреждений. Возможно, я написал его там по ошибке, но, поскольку он работал, и я использовал его так долго, я забыл посмотреть руководство, когда это произойдет. –

+0

Возможно, потому что в ваших других программах неявный бросок работал ... –

2

Вы должны бросить -1 к тому же типу указателя в качестве переменной вы сравниваете с:

if((tmp_n = (struct dot *)shmat(shm_net, NULL, 0)) == (struct dot *) -1) { } 
Смежные вопросы