2

freeに使えますconst char*か?これにより問題が発生しますか?

4

2 に答える 2

4

いいえ、その性質上、free()「簿記」を行うために、指定されたメモリに書き込む自由が必要です。constこれが、非ポインターを取るように定義されている理由です。

他の人が指摘しているように、これは機能しないという意味ではありません。C ではconst、ポインタの -ness を削除して、関数を なしで呼び出されたかのように実行させることができconstます。ただし、コンパイラはそれが発生したときに警告します。そのため、「問題を引き起こす」と考えています。

于 2010-05-03T12:12:14.070 に答える
1

ポインタが割り当てられた場合は、はい。警告が表示されますが、割り当てた時点で既に警告が表示されています。

const char *割り当てと解放の間に誰も書き込みを行わないようにしたい場合に、構造体でよく使用します。生涯不変の文字列を動的に作成し、副作用のある関数 ( strtok) で呼び出すと、問題が発生することがよくあります。それを宣言するconstことで、少なくともその場合に警告を受けることができます。

const char *msg;

asprintf((char *)&msg, "whatever" ...);
...
strtok(msg, ",");     // Will generate a warning 
...
free((char*)msg);
于 2010-05-03T12:19:21.770 に答える