Я скомпилировал Qt в 64 бит. Мой код также скомпилирован в 64 бит. Я инициализирую переменную-член (указатель) до нуля. Когда я проверяю его, XCode сообщает мне, что его значение не равно 0, а 0xffffffff00000000.
Является ли это признаком переполнения между 32 и 64? Каким образом 32-разрядная инициализация закралась в исполняемый файл, когда и библиотека, и мой код имеют "g++.. -arch x86_64 -Xarch_x86_64.."? В случае, если это имеет значение, я на Snow Leopard.
---- Begin-Edit ----
Я благодарен за все эти годы, что стандарт не налагает значение 0x00..00, когда присваивается 0 указателю, но в этом случае это не проблема.
#include <stdio.h>
int main()
{
const char * c = "Foo";
printf("Pointers in this executable use %lu bytes.\n", sizeof(c));
void * z = 0;
printf("A zero pointer in this executable is %p\n", z);
}
Если я сохраню код выше в "32_or_64.cpp", тогда скомпилируйте его с помощью "g++ -arch i386 32_or_64.cpp", я получаю
Pointers in this executable use 4 bytes. A zero pointer in this executable is 0x0
Если я скомпилирую его с помощью 'g++ -arch x86_64 32_or_64.cpp', я получаю
Pointers in this executable use 8 bytes. A zero pointer in this executable is 0x0
Если вы считаете, что это не устанавливает, что 0 в моей конкретной конфигурации не должно позволять мне видеть точно 0 при отладке в x86_64, пожалуйста, укажите это. В противном случае обсуждение "null" - замечательное обсуждение, но не относящееся к делу в этом потоке.
---- End-Edit ----