メッセージ構造体の内容をバッファにエンコードしています。セグメンテーションフォールトにつながる空の文字列入力を処理する
int encode(const struct message *msg, unsigned char *buffer, size_t max_size)
{
if (buffer == NULL)
return -1;
unsigned char *buf_pos = buffer;
unsigned char *ep = buffer + max_size;
if (buf_pos + 1 <= ep) {
*buf_pos++ = SYNC_WORD_1;
} else {
return buf_pos - buffer;
}
.
.
.
}
私がencode(&message, "", 1024);
と呼ぶと、予想通りセグメント化フォルトが発生します。私は、""
にはヌルターミネーターだけが含まれているので、セグメンテーションがプログラムに割り当てられていないメモリにアクセスしようとしていることが原因であると私は理解しています。
私が抱えている問題は、このエラーを処理しようとするときです。私は、有効な入力または別のsegfaultで偽陽性を引き起こさない無効な入力を特定する方法を発見していません。
このような入力を除外する正しい方法は何ですか?
どうすれば 'strlen(buffer)== 0' –
どのくらいのメモリを知っているか、書き込み可能かどうかという問題を特定のメモリ位置に解決する方法はありません。 –
'私はencode(&message、" "、1024);を呼び出します。 '第2引数は文字列定数であり、書き込むことはできません。あなたの '* buf_pos ++ = SYNC_WORD_1;'はそれに書き込もうとします。 – joop