я получаю Access violation writing location at 0xABCDEF
,
Я перепробовал много способов решить это. Но, наконец, не смог этого сделать.
#define xyz 0xABCDEF
#define ptr (UINT16 *) (xyz)
int main()
{
//int *ptr;
//ptr = (int*)malloc(sizeof(int));
*ptr = 0;
return 0;
}
Пожалуйста, помогите мне.
Вы не можете сделать это, потому что область памяти, которую вы пытаетесь использовать, не принадлежит вашему процессу. У вашей программы буквально нет соответствующих прав для этого.
Это не очень хорошая практика пытаться угадать и определить адрес памяти вручную, потому что использование таких адресов в основном вызывает неопределенную ситуацию поведения.
На самом деле, этот адрес 0xABCDEF
Вы пытаетесь использовать, похоже, что это было взято из какого-то учебника в качестве примера. Возможно, вы бы заменили его реальным адресом, который характерен для вашей системы и конфигурации ОС?
У вас нет прав на заполнение нулями места, не принадлежащего вашему процессу.
Если вы хотите заполнить нулем в определенном месте, вы должны выделить эту память 1-й … вы должны удалить свою строку «#define ptr …» и сделать что-то вроде в вашем закомментированном коде:
#include <stdio.h>
#include <stdlib.h>
int main(){
int* ptr = (int*) malloc(sizeof(int));
*ptr = 0;
return 0;
}
Ваша программа будет выделяться только определенным объемом памяти операционной системой.
Вы можете запросить дополнительную память, используя malloc (), тогда вы получите непрерывный кусок памяти из кучи, опять же это выделение выполняется операционной системой.
Помните эти пункты,
Ваша программа не может указать адрес памяти, по которому вы хотите выделить свою память.
Ваша программа не может получить доступ к любому произвольному адресу памяти, так как он будет контролироваться диспетчером виртуальной памяти, и любое нарушение вызовет аппаратное исключение.
Конечно, нет никакой логики в том, чтобы выделять память по одному конкретному адресу.