0
#include<stdio.h>

main()
{
int *A=NULL; 
*A=12; 
printf("The value of the ponter A is=%d",*A); 
}

このプログラムでセグメンテーション エラーが発生しています

4

2 に答える 2

3

NULLポインタの逆参照はundefined behaviour

    int *A=NULL; // creating a pointer to int and setting it to NULL
                 //means it points to nothing
    *A=12; // Now you try to dereference it so it's giving seg fault.

もう1つ、ポインターでint *AはないことはNULL、ポインターに直接値を代入することは無効な手段です。

int *A ;
*A=12; // It's invalid too

これを試してください:

int a=12;
int *A ;
A=&a; // assign later or you can so it in initialization

編集:ISO c99標準:指定された段落の最後の行にポントアウト

6.5.3.2 アドレス演算子と間接演算子の制約

4    The unary * operator denotes indirection. If the operand points to a function,

 the result is a function designator; if it points to an object, the result is an lvalue 

    designating the object. If the operand has type ‘‘pointer to type’’, the result has 

type ‘‘type’’. If an invalid value has been assigned to the pointer, the behavior of the 

unary * operator is undefined.84)
于 2012-11-22T06:51:26.960 に答える
2

pointer にメモリ位置を割り当てる必要がありますA

次のステートメント

int *A = NULL;

A は整数へのポインターであり、現在それが指すアドレスは NULL であるとのみ述べています。NULL への書き込みと NULL の逆参照は未定義の動作であるため、セグメンテーション違反が発生しています。

問題を解決するには、 mallocを使用してメモリを割り当てるか、ポインタが有効なオブジェクトを指すようにする必要があります。

于 2012-11-22T06:53:50.670 に答える