#include<stdio.h>
main()
{
int *A=NULL;
*A=12;
printf("The value of the ponter A is=%d",*A);
}
質問する
78 次
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 に答える