我完全迷失在这一点上,尽管我现在试图寻找一个解决方案,大约两个小时:
Valgrind用这段代码抛出了一堆大小为1的无效读和大小为1的无效写,我不知道如何修复它。
char *movieGetDirector(const movie *m)
{
char *tmp = NULL ;
tmp = malloc(strlen(m->director)+1) ;
strcpy(tmp, m->director) ;
return tmp ;
}
它在strlen行上得到大小为1的无效读取,然后在strcpy行上得到无效写入。我知道m->director肯定是一个字符串,因为用gdb测试它确实会发现它是一个字符串,而且它有文本。google上所有关于这个错误的解决方案都与没有这个+1相关,但是我有它,它仍然是一个问题。我怎么解决这个问题?
最佳答案
你的malloc/strlen/strcpy呼叫看起来不错。很可能设置m
和m的director
字段的代码做错了,内存损坏。您应该仔细检查该变量的分配和初始化位置。
也就是说,您的功能似乎是复制现有的strdup
函数。所以你可能想写:
char *movieGetDirector(const movie *m)
{
return strdup(m->director);
}
关于c - c-Valgrind-“大小为1的无效写入”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35868939/