gpt4 book ai didi

c - 解决 munmap 警告消息

转载 作者:太空宇宙 更新时间:2023-11-04 05:50:02 25 4
gpt4 key购买 nike

我正在编写一个程序,并获得了一个内存位置,我将其存储为一个 unsigned int,并将映射的长度存储为一个 unsigned int,我想取消映射。

我的以下方法会生成警告:

warning: passing argument 1 of ‘munmap’ makes pointer from integer without a cast [enabled by default]

/usr/include/i386-linux-gnu/sys/mman.h:77:12: note: expected ‘void *’ but argument is of type ‘unsigned int’

这引起了我的警告:

//startAddr and addrRange are stored as an unsigned int, 
void unmap(mapping_t *maps, const int *curSize){
int i = 0;
for (; i < *curSize; i++){
munmap(maps[i].startAddr, maps[i].addrRange);
}
}

当我点击 munmap 时,我的程序也会崩溃,但我假设它必须以某种方式处理警告

按要求定义 struct mapping_t:

typedef struct mapping{
unsigned int startAddr;
unsigned int endAddr;
unsigned int addrRange;
} mapping_t;

最佳答案

I'm writing a program and have gotten a memory location that I have stored as a unsigned int

不要那样做。使用 void *char *,甚至 [u]intptr_t。不要将指针填充到 unsigned int 中。那是错的。指针不是 int 值,可能无法用 int 正确表示,这就是您收到警告的原因。根据 C 标准,允许将指针转换为 int - 这就是为什么您会收到警告而不是实际错误的原因 - 但不能保证转换回指针值会产生相同的结果地址。

and the length of the mapping as an unsigned int and I want to unmap this.

也不要这样做。使用 size_t:

typedef struct mapping{
void *startAddr;
size_t addrRange;
} mapping_t;

你不需要 endAddr 因为你有起始地址和大小。如果需要结束地址,需要将startAddr转换为char *来计算结束地址。

关于c - 解决 munmap 警告消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44373952/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com