簡體   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