mac os xでmemchr()を使用すると、オーバーフローの問題が発生します。
これが私のテストコードです:
#include <stdio.h>
#include <stdlib.h>
int main(void){
char *content="http\r\nUser";
int content_size = strlen(content);
char *contmem = malloc(content_size+1);
memset(contmem, '\0', content_size+1);
memcpy(contmem, content, content_size);
printf("%c\n", *(content+content_size));
printf("%c\n", *(contmem+content_size));
char *t = memchr(content, 't', content_size);
printf("%c\n", *t);
return 0;
}
Linux、つまり私のfedora 16で正常に動作し、tの正しい値を出力します。しかし、Macで同じコードを実行すると、セグメンテーション違反が発生します。
gdbでデバッグした後、私は次のように言います。
(gdb) print t
$7 = 0xf4b <Address 0xf4b out of bounds>
次に、このテストファイルのmemchr関数を書き直そうとします。
static char*
memchr(const char *data, int c, unsigned long len){
char *tp = data;
unsigned long i;
for( i = 0; i<len; i++){
if((int)*tp == c){
return tp;
}else{
tp = tp+1;
}
}
}
そして、出力は正しいようです!
(gdb) print t
$1 = 0x100000f1d "ttp\r\nUser"
そのため、mac osでのmemchr()の異常な動作と混同されますが、memset()memcpy()などの他のmem関数は正常に機能します。
Macでmemchr()を書き直さずにテストを実行するにはどうすればよいですか?
ありがとう。