0

私はこのコードを持っています:

int a;
printf("&a = %u\n",(unsigned)&a);
printf("a\n");
printf("b\n");
printf("c\n");
printf("d\n");

a変数のポインタを出力しようとしました。
しかし、行で失敗し、 出力printf("a\n");と表示されます:Segmentation fault (core dumped)

&a = 134525024
Segmentation fault (core dumped)

コードから行を削除するprintf("&a = %u\n",(unsigned)&a);と、成功します。出力:

a
b
c
d

私のコードで何を着ていますか?

4

2 に答える 2

0

これはアーキテクチャの問題である可能性があります。私はこれをOSXで実行しましたが、正常に実行されました。

#import <stdio.h>
int main()
{
    int a;
    printf("&a = %u\n",(unsigned int)&a);
    printf("a\n");
    printf("b\n");
    printf("c\n");
    printf("d\n");
}

ただし、コンパイル中に警告が表示されました。

warning: cast from pointer to integer of different size

私は64ビットマシンを使用しているため、64ビットポインターを32ビット整数に適合させることができません。代わりにこれを実行してみて、何が得られるかを確認してください。

#import <stdio.h>
int main()
{
    int a;
    printf("unsigned %ld\n", sizeof(unsigned)); // sizes reported in bytes
    printf("int %ld\n", sizeof(int));           // same as unsigned
    printf("long %ld\n", sizeof(long));         // should fit a pointer
    printf("ptr %ld\n", sizeof(void*));         // size of a pointer
    printf("&a = %lu\n", (unsigned long)&a);    // should print out your pointer
    printf("&a = %p\n", &a);                    // the Right Way of doing things
}

出力:

unsigned 4
int 4
long 8
ptr 8
&a = 140734544742408
&a = 0x7fff508c0808

編集:

あなたが知らなかった場合に備えて、unsigned実際にはを意味しunsigned intます。同様に、long実際にはを意味しlong intます。

また、値がその物理サイズを変更するかどうかにかかわらず、値がどのように解釈されるかだけですsignedunsigned最初の2枚のプリントからそれを見ることができます。

于 2012-12-15T17:24:51.580 に答える
0

問題を解決しました。ubuntuとvmwareを再インストールするだけで、今はうまくいきます。正確な問題が何であるかはよくわかりませんが、問題は解決しました... :-)

于 2012-12-18T19:38:10.620 に答える