Как писал Сергей А в комментариях, ваш подход неверен.Вы не должны искать конкретное значение 0x11
.Гораздо более вероятно, что указатель просто имеет это значение.
Я предлагаю вам скомпилировать с gcc -Wall -Wextra -pedantic
и обратить внимание на все предупреждения.Я бы особенно искал неинициализированные переменные.Помните, что указатели не будут автоматически инициализироваться нулем.Если они неинициализированы, они (вероятно) будут иметь любое значение, которое ранее было в памяти.Я говорю "возможно" , потому что компилятор может инициализировать их нулевым или даже другим значением, не нарушая стандарт Си.
Кроме того, как написал Евгений в комментарии, обнаружение того, что указатель имеет именно это значение, не решает вашу проблему.Если вам повезет, это может помочь вам найти проблему, но, скорее всего, это пустая трата времени.
Я мог бы упомянуть, что ваши тесты верны.Посмотрите на этот код:
#include <stdio.h>
int main()
{
void *ptr = (void*)0x11;
if(ptr == (void*)0x11) printf("ptr == 0x11\n");
if(ptr <= (void*)0x11) printf("ptr <= 0x11\n");
if(ptr <= (void*)0x10) printf("ptr <= 0x10\n");
}
Он выводит:
$ ./a.out
ptr == 0x11
ptr <= 0x11
Как и ожидалось.Это означает, что ваш код имеет неопределенное поведение .
Еще одна вещь, которую вы могли бы сделать, - это сделать явную инициализацию для некоторого значения, которое вы выбираете самостоятельно.Посмотрите на этот код:
int main(int argc, char ** argv) {
// 42 is 2a in hex, and 42 is a good random value
char *ptr=(void*)0x2a;
// If any arguments are supplied to the program if(argc > 1) {
ptr = argv[1];
printf("The first argument has address %p\n", (void*) ptr);
}
if(ptr == (void*) 0x2a)
printf("Something fishy happened.\n");
}
Вывод:
$ ./a.out
Something fishy happened.
$ ./a.out foo
The first argument has address 0x7ffca6323ad8
Хотя возможно, что адрес первого аргумента на самом деле равен 0x2a
, это маловероятно.Я думаю, что это может быть очень хороший подход, чтобы найти, что не так.