mac os x에서 memchr()을 사용할 때 오버플로 문제가 발생합니다.mac os에서 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;
}
리눅스에 정상적으로, 즉 내 페도 (16), 및 t의 정확한 값을 출력한다. 그러나 Mac에서 동일한 코드를 실행하면 Segmentation Fault가 발생합니다 !!
(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로 디버깅 후, 나는 말을! memset 함수와 같은 다른 MEM 기능() 방어 적이기()가 잘 작동하는 동안
(gdb) print t
$1 = 0x100000f1d "ttp\r\nUser"
그래서 나는, 맥 OS에 memchr()의 비정상적인 행동에 혼란 스러워요.
어떻게 mac에서 memchr()을 다시 작성하지 않고도 테스트를 실행할 수 있습니까 ??
감사합니다.
대체 항목에는 정의되지 않은 동작이 있습니다. 즉, 대상 바이트를 찾지 않고 버퍼의 끝에 도달하면 '돌아 가기'가 없습니다. –
이 코드는 내 Mac에서 잘 작동합니다. –