[英]c - Valgrind - “Invalid write of size 1”
尽管现在试图寻找大约两个小时的解决方案,但我对此完全迷失了:
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);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.