Я делаю 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 без предупреждения?
Если вы работаете в системе с виртуальной памятью (в основном в каждой системе, подобной ПК за последние пару десятилетий), адреса, которые вы получаете malloc
, не будут отражать фактическое физическое расположение памяти. — person Robin schedule 21.10.2019
Связанный: stackoverflow.com/q/24212792/1025391 — person Robin schedule 21.10.2019
Более того, объявление message
как указателя на массив неизвестного размера само по себе не имеет особого смысла и редко имеет смысл вообще (и строится ли он вообще?). И к вашему предупреждению, указатель на массив не того же типа, что и указатель на указатель. — person Robin schedule 21.10.2019
Чего вы на самом деле пытаетесь достичь? Это похоже на проблему XY — person Robin schedule 21.10.2019
Адрес памяти, разумеется, не может храниться в char
типе и может не соответствовать int
типу. — person Robin schedule 21.10.2019
Я делаю malloc, а потом хочу проверить, находится ли результат malloc в моей RAM: возвращаемое значение malloc
находится в вашей RAM, это точно и справедливо для любой реализации. — person Robin schedule 21.10.2019
Дубликат: «Указатель целого / целого числа из указателя без проблемы с трансляцией — person Robin schedule 21.10.2019
Возможный дубликат Указатель целого / целого числа из указателя без проблемы с трансляцией — person Robin schedule 21.10.2019
Вы, вероятно, захотите что-то вроде этого:
Имейте в виду, что это имеет смысл только на определенном оборудовании (вы не упомянули свою целевую систему).
В современной настольной системе (Mac / Windows / Linux) это не имеет смысла, поскольку все адреса памяти виртуальные.