-1

私は何時間もこれを理解しようとしてきましたが、少し頭がおかしくなりました。プログラムを実行するとセグメンテーション違反が発生し続けます。どうすれば修正できますか? 「異なるサイズの整数からポインターを試行しています」という警告も表示されますが、キャスト (int *) を使用すると、まだ警告が表示されます。助けてください...コードは次のとおりです。


int address, length, i;
int * p = malloc(sizeof(int));

printf("Please enter <address> <length>\n");
scanf("%x %d", &address, &length);
p = (int *) address;

for (i=0; i<length;i++){
 printf( "%02x ", p[i] );
}
4

3 に答える 3

1

これは「機能する」はずです-もちろん、有効なアドレスを入力する必要があります。そうしないと、読み取れないアドレスから読み取ろうとしているためにコードがクラッシュします-それについてできることは何もありません。 「存在しない、または自分のものではないメモリを読み込もうとした」を処理するオペレーティングシステムの部分を書き換えます。

uintptr_t address;
int length, i;
int *p;

 // No need to malloc here. malloc(sizeof(int));

printf("Please enter <address> <length>\n");
scanf("%" PRIxPTR " %d", &address, &length);
p = (int *) address;

for (i=0; i<length;i++){
 printf( "%02x ", p[i] );
}
于 2013-06-02T14:43:48.190 に答える
0

ここで修正するものは何もありません。存在しないメモリ アドレスにアクセスしようとしているか、アクセスする権限がありません。

ここを読む: http://en.wikipedia.org/wiki/Segmentation_fault#Common_causes

于 2013-06-02T13:49:31.543 に答える
0

使用する

p = &address;またはmemcpy(p,&address,sizeof(int))instead of p = (int *) address;

また、長さが 1 より大きい場合、次の場所でセグメンテーション違反が発生する可能性があります

for (i=0; i<length;i++){
 printf( "%02x ", p[i] );
}
于 2013-06-02T14:00:53.710 に答える