【发布时间】:2015-02-05 03:04:38
【问题描述】:
我正在尝试使用 Valgrind 调试我的代码,但我确实在读取函数方面遇到了一些问题。
这是 Valgrind 日志:
==4333== Syscall param read(buf) points to unaddressable byte(s)
==4333== at 0x4F0C600: __read_nocancel (in /lib64/libc-2.18.so)
==4333== by 0x400AB7: my_read (get_next_line.c:132)
==4333== by 0x400B6C: get_next_line (tmp.c:25)
==4333== by 0x400B27: main (get_next_line.c:146)
==4333== Address 0x401000 is not stack'd, malloc'd or (recently) free'd
==4333==
==4333==
==4333== HEAP SUMMARY:
==4333== in use at exit : 4,106bytes in 1 blocks
==4333== total heap usage: 1 allocs, 0 frees, 4,106 bytes allocated
==4333==
==4333== 4,106 bytes in 1 blocks are definitely lost in loss record 1 of 1
==4333== at 0x4C277AB: malloc (in /usr/lib64/valgrind/vgpreload_memcheck-amd64-linux.so)
==4333== by 0x400A59: my_read (get_next_line.c:129)
==4333== by 0x400B6C: get_next_line (tmp.c:25)
==4333== by 0x400B27: main (get_next_line.c:146)
==4333==
==4333== LEAK SUMMARY:
==4333== definitely lost: 4,106 bytes in 1 blocks
这里是代码:
int my_read(int fd)
{
char *str;
void *buff;
int x;
str = NULL;
if ((buff malloc(BUFFER_SIZE + 10)) == NULL)
return (NULL);
buff = NULL;
while ((x = read(fd, buff, BUFFER_SIZE)) > 0) //LINE 132
str = (str == NULL) ? my_strdup(buff) : my_strcat(buff, str);
return (str);
}
BUFFER_SIZE 在 4096 处定义。
我理解错误,但我不知道如何携带。 如果你们能帮我解决这个问题,那就太棒了。泰。
【问题讨论】:
-
About-To-Be-Related:
buff malloc(...- 想要购买 assignment 运算符 (=) ?.