Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:关于munmap to struct的警告_C_Mmap - Fatal编程技术网

C:关于munmap to struct的警告

C:关于munmap to struct的警告,c,mmap,C,Mmap,我有一个结构: typedef结构{ uint32长度偏移量; uint32_t tms_偏移量; uint32_t tdi_偏移量; uint32时差偏移量; uint32控制偏移量; }jtag_t; 我用它创建内存映射: volatile jtag\u t*jtag\u mem\u loc=(volatile jtag\u t*)mmap( NULL、kMapSize、PROT_READ | PROT_WRITE、, MAP_SHARED,fd_uio,0); 到目前为止没有问题,直到

我有一个结构:

typedef结构{
uint32长度偏移量;
uint32_t tms_偏移量;
uint32_t tdi_偏移量;
uint32时差偏移量;
uint32控制偏移量;
}jtag_t;
我用它创建内存映射:

volatile jtag\u t*jtag\u mem\u loc=(volatile jtag\u t*)mmap(
NULL、kMapSize、PROT_READ | PROT_WRITE、,
MAP_SHARED,fd_uio,0);
到目前为止没有问题,直到我
munmap

if(munmap(jtag_mem_loc,kMapSize)==(fd_t)-1)
perror(“关闭错误:”);
我收到了警告信息

clang -std=c11  ../src/sw/app/xvc_server.c -o ./t                             
../src/sw/app/xvc_server.c:55:17: warning: passing 'volatile jtag_t *' to parameter of type
      'void *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]
    if ( munmap(jtag_mem_loc, kMapSize) == (fd_t) -1 ) 
                ^~~~~~~~
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/sys/mman.h:247:22: note: 
      passing argument to parameter here
int     munmap(void *, size_t) __DARWIN_ALIAS(munmap);
                     ^
1 warning generated.
我将类型转换为
void*
,然后可以解决警告问题

if(munmap((void*)jtag_mem_loc,kMapSize)==(fd_t)-1)
perror(“关闭错误:”);
好吧,把
AnyType*
转换成
void*
通常是个坏主意。
我有其他解决方案吗?

您的强制转换代码是正确且必要的。

强制转换为
无效*
没有什么问题。这就是
void
指针的作用。好的,我明白了。这个实例让我知道存在从
AnyType*
void*
的正确用法。谢谢