c - ncurses:警告:取消引用 ‘void *’ 指针

标签 c gcc ncurses

我试图理解 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/

相关文章:

c - 难以理解以下 C 指针

c - 在主程序运行时替换共享对象(.so 文件)

c++ - 为什么 gcc 不编译这个调用 free() 函数的微不足道的代码?

c++ - GCC 7 没有选择正确的类型特征特化

c - 基于ncurses的程序拦截SIGWINCH后无法识别按键

c++ - Ncurses - 如何将某些内容添加到输入缓冲区中

c++ - 在x86_64模式下,寄存器中无法容纳64位数字

c++ - 伙伴分配算法 - 起始堆地址

macos - 内部编译器错误 : killed (program cc1plus) on MAC OS Sierra

c - delwin(),endwin(),不在条件语句内工作