Как правильно привести приведение к сравнению указателя на явный диапазон адресов? - PullRequest
0 голосов
/ 21 октября 2019

Я делаю некоторые malloc, а затем я хочу проверить, находится ли результат от malloc в моей оперативной памяти следующим образом:

char (*message)[];
message = malloc(data_index);
if(message != NULL && message >= 0x20000000 && message < 0x20030000){
  //do something
}

Это работает, но я получаю предупреждение : сравнение между указателем ицелое число . Я бы хотел избавиться от этого предупреждения, но как? Предупреждение исчезает, когда я приводю целое число к типу char, но это, очевидно, ложное решение.

if(message >= (char)0x20000000) {

Я также пытался привести его к двойному указателю, который я считаю правильным типом, нопредупреждение все еще там.

if(message >= (char**)0x20000000) {

Как я могу получить оператор if без предупреждения?

1 Ответ

1 голос
/ 21 октября 2019

Вы, вероятно, хотите что-то вроде этого:

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
}

Имейте в виду, что это имеет смысл только на конкретном оборудовании (вы не упомянули целевую систему).

На современном настольном компьютересистема (Mac / Windows / Linux) это не имеет смысла, так как все адреса памяти являются виртуальными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...