これは、行を読み取る関数の短いスニペットです。bufsize
それが比較される可能性はどのようにあり((size_t)-1)/2
ますか?
私は変数を例えばと比較することを想像しました。int
-それは不可能です。逆にINT_MAXに対しては正しいと思います。では、そのコードは実際にどのように機能し、エラーを発生させないのでしょうか。
int c;
size_t bufsize = 0;
size_t size = 0;
while((c=fgetc(infile)) != EOF) {
if (size >= bufsize) {
if (bufsize == 0)
bufsize = 2;
else if (bufsize <= ((size_t)-1)/2)
bufsize = 2*size;
else {
free(line);
exit(3);
}
newbuf = realloc(line,bufsize);
if (!newbuf) {
free(line);
abort();
}
line = newbuf;
}
/* some other operations */
}