-4

私は得て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;
}

私を助けてください。

4

3 に答える 3

4

使用しようとしているメモリの場所がプロセスに属していないため、実行できません。あなたのプログラムには文字通り、それを行うための適切な権限がありません。

このようなアドレスを使用すると、基本的に未定義の動作状況が発生するため、メモリアドレスを手動で推測して定義しようとするのは良い方法ではありません。

実際、0xABCDEF使用しようとしているアドレスは、例として何らかのチュートリアルから取得したようです。おそらく、システムと OS 構成に固有の実際のアドレスに置き換えますか?

于 2013-02-28T14:35:19.057 に答える
1

プロセスに属していない場所をゼロで埋める権限がありません。

特定の場所でゼロを埋めたい場合は、最初にそのメモリを割り当てる必要があります...行「#defineptr ...」を削除して、コメント付きコードのようにする必要があります。

#include <stdio.h>
#include <stdlib.h>

int main(){
    int* ptr = (int*) malloc(sizeof(int));
    *ptr = 0;
    return 0;
}
于 2013-02-28T14:42:58.477 に答える
1

プログラムには、オペレーティング システムによって一定量のメモリのみが与えられます。malloc() を使用して追加のメモリを要求すると、 heap から連続したメモリのチャンクが取得されます。この割り当てはオペレーティング システムによって行われます。

これらのポイントを覚えて、

メモリを割り当てるメモリ アドレスをプログラムで指定することはできません。

プログラムは、仮想メモリ マネージャーによって監視されるため、任意のランダム メモリ アドレスにアクセスできず、違反するとハードウェア例外が発生します。

メモリを 1 つの特定のアドレスに割り当てたいという論理は確かにありません。

于 2013-02-28T15:05:26.740 に答える