我试图理解 NCURSES 源代码并在错误点上进行了攻击。代码如下:
#include<stdio.h>
struct screen {
void *_current_attr;
};
typedef struct screen SCREEN;
SCREEN * SP = ((void *)0);
int main(int argc, char **argv){
((*(SP)->_current_attr)) = (
((*((SP)->_current_attr))) &
~((~(1UL - 1UL)) << ((0) + 8))) | ((1UL - 1UL)
);
return 0;
}
我收到的错误消息为:
In function ‘main’:
warning: dereferencing ‘void *’ pointer
warning: dereferencing ‘void *’ pointer
error: void value not ignored as it ought to be
error: invalid use of void expression
我想知道错误的原因和解决方法是什么?
最佳答案
错误发生在这里:
*((SP)->_current_attr))
这相当于(据我所知)
*(SP->_current_attr)
自
_current_attr
类型为 void*
, void*
正在被取消引用,这是非法的。解决这个问题的一种方法是给
_current_attr
一个类型。 .struct screen {
int *_current_attr;
};
关于c - ncurses:警告:取消引用 ‘void *’ 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17174774/