繁体   English   中英

c-Valgrind-“大小为1的无效写入”

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM