C 如何正确地强制转换以将指针与显式地址范围进行比较?
我做了一些malloc,然后我想检查malloc的结果是否在我的RAM中,如下所示:C 如何正确地强制转换以将指针与显式地址范围进行比较?,c,pointers,casting,C,Pointers,Casting,我做了一些malloc,然后我想检查malloc的结果是否在我的RAM中,如下所示: char (*message)[]; message = malloc(data_index); if(message != NULL && message >= 0x20000000 && message < 0x20030000){ //do something } char *message; message = malloc(data_index); i
char (*message)[];
message = malloc(data_index);
if(message != NULL && message >= 0x20000000 && message < 0x20030000){
//do something
}
char *message;
message = malloc(data_index);
if(message != NULL && message >= (char*)0x20000000 && message < (char*)0x20030000){
// will do something
// if message contains an address between 0x20000000 and 0x20030000
}
我还尝试将其转换为双指针,我认为这是正确的类型,但警告仍然存在
if(message >= (char**)0x20000000) {
如何在没有警告的情况下获得woking if语句?您可能需要这样的语句:
char (*message)[];
message = malloc(data_index);
if(message != NULL && message >= 0x20000000 && message < 0x20030000){
//do something
}
char *message;
message = malloc(data_index);
if(message != NULL && message >= (char*)0x20000000 && message < (char*)0x20030000){
// will do something
// if message contains an address between 0x20000000 and 0x20030000
}
char*消息;
消息=malloc(数据索引);
如果(消息!=NULL&&message>=(字符*)0x20000000&&message<(字符*)0x20030000){
//我会做点什么
//如果消息包含介于0x20000000和0x20030000之间的地址
}
请注意,这只适用于特定的硬件(您没有提到您的目标系统)
在现代桌面系统(Mac/Windows/Linux)上,这是没有意义的,因为所有内存地址都是虚拟的。如果您在一个具有虚拟内存的系统上(基本上是过去几十年中的每一个类似PC的系统),malloc接收到的地址将不会反映内存的实际物理位置。此外,将
message
声明为指向未知大小数组的指针本身没有多大意义,通常也没有多大意义(它甚至可以构建吗?)。请注意,指向数组的指针与指向指针的指针的类型不同。您实际上想要实现什么?这看起来像一个内存地址,当然不能保存在char
类型中,也可能不适合int
类型。“我做了一些malloc,然后我想检查malloc的结果是否在我的RAM中:malloc
的返回值在你的RAM中,这是肯定的,对任何实现都是有效的。”。