當在mac os上使用memchr()時,遇到溢出問題x。爲什麼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;
}
它正常工作在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()的異常行爲,而其他MEM功能,如memset的()的memcpy()工作正常。
如何在不重寫memchr()的情況下運行測試?
謝謝。
您的替代品具有未定義的行爲(即,如果到達緩衝區末尾沒有找到目標字節,則沒有「返回」)。 –
此代碼在我的Mac上正常工作。 –