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