我完全迷失在这一点上,尽管我现在试图寻找一个解决方案,大约两个小时:
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/

10-11 19:00