Есть вот такой кусок кода: void Function(LPVOID Buffer) { LPVOID Temp; Temp=Buffer; *(char *)Temp = 32; --Вот тут я не понимаю. Почему Access violation } Может есть другой вариант как это реализовать???
посмотрите с помощью Debug'a значение Buffer (или Temp). Может в функцию просто передается некорректное значение Buffer, типа 0x00000000. Ну и для большей читабельности можно записывать так *((char*)Temp). Хотя проблема конечно в неправильном адресе
Access violation - в конечном счете идет обращение по неправильному адресу. Откуда берется значение для Buffer перед вызовом функции? может быть это адрес на область памяти, которая не зарезервирована (статически или динамически) для Вашей программы. Buffer должен указывать либо на объявленные переменные, либо на область выделенную динамически (например, malloc или что там используется под Виндой).
да, кстати, это возможно... в такой форме "proverka" может быть строковой константой, которую нельзя изменять.
Вот код. void function(LPVOID Buffer) { LPVOID Temp; Temp=Buffer; *(char *)Temp = 32; } int APIENTRY _tWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPTSTR lpCmdLine, int nCmdShow) { Function ("Proverka"); return 0; }
Строки в кавычках размещаются в секции, доступной только на чтение. Либо меняй параметры линкера, чтобы секция была доступна на запись или совмещалась с доступной на запись секцией, либо выделяй в куче/на стеке.