ポインターを返す関数..成功した場合、それ以外の場合は「-1」を返す必要があります。
エラー表示と関数結果をそのような 1 つのオブジェクトに混在させないでください。関数がブール値の成功インジケーターのみを返すようにすることで、それらを 2 つの異なるエンティティに分割し、次のようなポインターを介して実際の結果データを返します。
bool myfunction(char **result_ptr) {
char *data;
if (some error condition)
return false;
*result_ptr = data;
return true;
}
int main () {
bool success;
char *data:
success = myfunction(&data);
if (success)
use(data);
}
インバンド エラー インジケーターは、多くの場合失敗を招く貧弱な API を作成し (realloc
関数の極端なケースでは、失敗した場合に元のポインターを失うコードを記述する必要があります)、少なくとも次の点で失敗します優れた API の特徴
- ドキュメントがなくても使いやすい
- 誤用しにくい
- それを使用するコードを読みやすく、保守しやすい
CERTは、セキュリティの観点からそれらを推奨していません。