0
A
回答
1
第一個問題,我看到的是,FUNC2沒有錯誤檢查。無論valgrind是注意到這一點,還是抱怨別的,我都不確定。
如果你知道,在所有用例FUNC2將永遠與std == NULL
被調用,那你就不要需要錯誤檢查。但valgrind無法知道,即使這是真的。是否支票如:
func2(str, line)
{
char * t1 = str, * t2 = str;
if (str == NULL) return;
...
}
有幫助嗎?
0
我認爲問題是,Valgrind的指出:
str = realloc(str, ....); //this is within the loop
可以設置str
爲NULL(如果realloc()
失敗)。
看看像下面讓Valgrind的快樂:
char* tmp = realloc(str, ...);
if (!tmp) {
abort(); // or some other error handling
}
str = tmp;
相關問題
- 1. RAII和未初始化值
- 2. 值未初始化
- 3. 未初始化的初始值常量
- 4. 未初始化的值 - Valgrind
- 5. C++值初始化
- 6. Valgrind - 未初始化的值和字節?
- 7. 未初始化值8
- 8. C++結構體初始值初始化
- 9. C++ 11的值初始化之前聚集初始化
- 10. 聯盟初始化++和C
- 11. c聲明和初始化
- 12. 未初始化列表的大小C#
- 13. C++:未初始化的變量垃圾
- 14. 未初始化的變量故障C++
- 15. 未初始化的串聯值
- 16. 使用未初始化值的fetchrow後()
- 17. 未初始化的計劃值[錯誤]
- 18. 的Perl -check未初始化值
- 19. Valgrind-未初始化的值消息
- 20. 使用未初始化的值
- 21. 統一和值初始化
- 22. python ctypes國外圖書館初始化和未初始化
- 23. C++初始化
- 24. c#初始化
- 25. C++ - 初始化與骨料初始化
- 26. C結構自動初始化值,數組初始化
- 27. SelectCommand.Connection未初始化
- 28. Applet未初始化
- 29. java.lang.IllegalStateException:ApplicationEventMulticaster未初始化
- 30. SWFUpload未初始化
它看起來就像是抱怨,因爲如果str參數進行初始化(進入FUNC2)的valgrind不知道。你可以嘗試像'char * t2 = malloc(1); t2 = str;'看看它是否抱怨? –
此外,避免使用'str = realloc(str,....);' - 如果失敗,'str'將被設置爲'null',並且您將失去指向最初分配的內存的指針到它。這是一個經典的內存泄漏。 –
您的問題可能是由於字符串不正確的空終止引起的,但是如果您發佈了func1()的整個代碼以及valgrind的錯誤消息,那隻能是可診斷的。 – jpalecek