64-битная архитектура - указатель символа усечен при возврате из функции

Среда:

Windows x64 bit с 5 ГБ ОЗУ. Мой двоичный файл - 64-битный, собранный с помощью компилятора версии - "Оптимизирующий компилятор Microsoft (R) C / C ++ версии 14.00.50727.762 для x64"

Настройка среды:

Microsoft предлагает установить указанный ниже раздел реестра для тестирования 64-битных приложений, и я установил то же самое в моем окне. Проблема не возникает, если я не установил реестр, указанный ниже, потому что программа размещена по низкому адресу. Тот же ключ реестра упоминается в обсуждении - Как программист, о чем мне нужно беспокоиться при переходе на 64-битные окна?

Чтобы принудительно выделять ресурсы с более высоких адресов перед более низкими адресами в целях тестирования, укажите MEM_TOP_DOWN при вызове VirtualAlloc или установите для следующего значения реестра значение 0x100000:

HKEY_LOCAL_MACHINE \ System \ CurrentControlSet \ Control \ Session Manager \ Memory Management \ AllocationPreference

Пример кода:

char *alloc_str()
{
    char *temp;
    temp = (char *) malloc(60);
    /* copy some data to temp */
    return temp;
}

main()
{
    char *str;
    str = (char *)alloc_str();
}

Анализ:

malloc возвращает адрес 0x000007fffe999b40 , который хранится в temp , но когда указатель возвращается в main () , str ] получает только вторую половину - 0xfffffffffe999b40 , и я не могу получить доступ к данным в этом месте.

6
задан Community 23 May 2017 в 12:33
поделиться