質問

私はプロジェクトに取り組んでおり、プロジェクトを完了することができないこのエラーに出くわし続けます。ポインターの1つを初期化して、プログラムの実行中に作成されるオブジェクトを指すとき、それを初期化します NULL. 。次に、それが何を設定しているかを確認すると、次の値が返されます nil. 。そのようなことはどうですか?私はCにnilのポインターが存在するとは信じていませんでした。これを取り巻く方法はありますか?

struct order_line *front = NULL;
...
printf("Head: %p\n", front);  // prints -> Head: (nil)
役に立ちましたか?

解決

%pprintf ポインタータイプをフォーマットします。これにより、ヌルポインターと印刷が区別されます (nil) ポインターのコンテキストでは特別な価値があるからです。 nullポインターに0を出力する場合は、ポインターを整数にキャストして使用します %d 代わりは:

printf("Head: %d\n", (int) front);

それはまだ有用かもしれないので、元の答え:

NULL と定義されているマクロです 0 また ((void *) 0), 、したがって、ポインターを設定した場合 NULL 設定とまったく同じです 0. 。これは、アドレス0のメモリがプログラムに割り当てられないため、ヌルポインターを宣言することを目的としています。

他のヒント

使用してポインターを印刷するとき printf("%p", somePtr), 、anで印刷されています 実装定義の方法, 、からのこの引用に従って posix printf仕様 (C99仕様にも同様の言葉遣いが存在します)。

議論はボイドへのポインターでなければなりません。ポインターの値は、実装に依存する方法で、印刷可能な文字のシーケンスに変換されます。

私は、これはポインターが NULL, 、それはそれを印刷することを印刷するかもしれませんが、それをとして印刷することを含めます nil また 0x00000000 また 0.

使用する

printf("Head: %s, %d, %p\n", front, front, front);

印刷する Head: (null), 0, (nil)

Packiaに感謝します

私はあなたのデバッガーがあなたに言っていることだと思います。ほとんどのコンパイラでは、nullはとにかく#define ed edにあるので、その名前はそれほど重要ではありません。

他の人が述べたように、Cにはnilpointerのようなものはありません

メモリの割り当てが失敗し、引き起こされる可能性があります 0 ポインターに割り当てられます。

あなたの質問がポインター値をnullと比較することについての場合、printf()によって印刷された値は問題ではありません。あなたはまだできます if(ptr == null) そのために。

    ptr =(nil)およびnull =(nil)=> ptr = null :)

他の理由のために、あなたが取得しているエラーは必須です。

INTで構造ポインターをキャストした後、IFステートメントで予想される条件を提供します。

printf("The address of the variable is---ps->p---After Deletion-- %p \n",ps->p);
printf("The address of the variable is---ps->p---After Deletion--  %d \n",(int)ps->p);
if((int)ps->p){
printf("Again in Free\n");
doFree((void **)&ps->p);
}

出力: -

変数のアドレスは--- ps-> p ---削除後 - 変数のアドレスは--- ps-> p ---削除後 - 0です。

条件の場合はfalseに評価されます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top