① c語言中,怎麼檢查調用一個函數之後,有無內存泄露
如果這個函數是你寫的 那最好的方法 就是檢查代碼
如果不是
那麼 可以自己做一個C庫
把malloc和free改一下名字
然後 你再自己實現一個malloc 和free
這樣就可以記錄申請和釋放的數量
得到是否有泄露了
② C語言中,如何檢查調用一個函數之後,有無內存泄露
一個復雜的問題,內存泄露檢測會操作系統有關,可以作一個技術專著,不適宜在這回答,自己可以在網上搜搜。但在自己編寫的程序中,謹記自己什麼時候進行了內存分配,是否在函數結構前釋放了自己分配的內存。寫程序注意有頭有尾,前後連貫,形成良好習慣,內存泄露就可以解決。
③ c語言 內存泄露
將Student a[2],b[2],*p1,*p2;
改成Student a[2],b[2],*p1=&a[0],*p2=&b[0];
④ C語言內存泄露的問題
malloc是向系統申請內存的,因為你用的系統在你的程序退出後自動釋放的內存,所以沒有造成泄露問題。
這種情況下,你的程序不退出,而是不斷地申請內存,部分釋放內存或完全不釋放內存,才會造成泄露。
⑤ C語言中內存泄漏的源碼
內存泄漏一般是指:程序動態分配的堆內存在使用完後沒有被釋放.有兩類內存泄漏情況:一.在ring3下內存泄漏(臨時性的ring0內存泄漏);二.在ring0下內存泄漏.前者的一般不會造成嚴重問題,頂多程序卡死,當進程終止,所有該進程的內存泄漏隨之變得無意義.而後者則會造成系統卡死甚至倒塌.至於c程序,不言自明.
⑥ C語言中的內存泄露 怎樣避免與檢測
堆經常會出現兩種類型的問題:1.釋放或改寫仍在使用的內存(稱為:「內存損壞」)。2.未釋放不再使用的內存(稱為:「內存泄露」)。這是最難被調試發現的問題之一
有些程序並不需要管理它們的動態內存的使用。當需要內存時,它們簡單地通過分配來獲得,從來不用擔心如何釋放它。這類程序包括編譯器和其他一些運行一段固定的(或有限的)時間然後終止的程序。當這種類型的程序終止時,所有內存會被自動回收。細心查驗每塊內存是否需要回收純屬浪費時間,因為它們不會再被使用。
其他程序的生存時間要長一點。有些工具如日歷管理器、郵件工具以及操作系統本事經常需要數日及至數周連續運行,並需要管理動態內存的分配和回收。由於C語言通常並不使用垃圾回收器(自動確認並回收不再使用的內存塊),這些C程序在使用malloc()和free()時不得不非常慎重。
堆經常會出現兩種類型的問題:
1.釋放或改寫仍在使用的內存(稱為:「內存損壞」)。
2.未釋放不再使用的內存(稱為:「內存泄露」)。
這是最難被調試發現的問題之一。如果每次已分配的內存塊不再使用而程序並不釋放它們,進程就會一邊分配越來越多的內存,一邊卻並不釋放不再使用的那部分內存。
避免內存泄露
每當調用malloc分配內存時,注意在以後要調用相應的free來釋放它。
如果不知道如何調用free與先前的malloc相對應,那麼很可能已經造成了內存泄露!
一種簡單的方法就是在可能的時候使用alloca()來分配動態內存,以避免上述情況。當離開調用alloca的函數時,它所分配的內存會被自動釋放。
顯然,這並不適用於那些比創建它們的函數生命期更長的結構。但如果對象的生命期在該函數結束前便已經終止,這種建立在堆棧上的動態內存分配是一種開銷很小的選擇。有些人不提倡使用alloca,因為它並不是以後總可移植的方法。如果處理器在硬體上不支持堆棧,alloca()就很難高效地實現。
我們使用「內存泄露」這個詞是因為一種稀有的資源正在被一個進程榨乾。內存泄露的主要可見症狀就是罪魁進程的速度很減慢。原因是體積大的進程更有可能被系統換出,讓別的進程運行,而且大的進程在換進換出時花費的時間也更多。即使泄露的內存本省並不被引用,但它仍用可能存在於頁面中(內容自然是垃圾),這樣就增加了進程的工作頁數量,降低了性能。另外需要注意的一點是,內存泄露往往比忘記釋放的的數據結構要打,因為malloc()所分配的內存通常會圓整為下一個大於申請數量的2的整數次方(如申請212B,會圓整為256B)。在資源有限的情況下,即使引起內存泄露的進程並不運行,整個系統運行速度也會被拖慢。從理論上說,進程的大小有一個上限值,這在不同的操作系統中各不相同。在當前的SunOS版本中,進程的最大地址空間可以多達4GB。事實上,在進程所泄露的內存遠未達到這個數量時,磁碟的交換區早已消耗殆盡。
如何檢測內存泄露
觀察內存泄露是一個兩步驟的過程。首先,使用swap命令觀察還有多少可用的交換空間:
/usr/sbin/swap -s
total:17228K bytes allocated + 5396K reserved=22626K used,29548K available.
在一兩分鍾內鍵入該命令三到四次,看看可用的交換區是否在減少。還可以使用其他一些/usr/bin/*stat工具如netstat、vmstat等。如發現波段有內存被分配且從不釋放,一個可能的解釋就是有個進程出現了內存泄露。
⑦ 高分求助!!!C內存泄露檢測問題
你可以對於malloc進行overload,
在malloc中,進行bufferID,Appchain等信息的輸出
⑧ c語言內存泄露如何解決
確保每個malloc()函數申請的空間,都有對應的free()函數將其釋放。這是基本的辦法。另外,要避免在malloc()與對應free()之間的語句,不出現嚴重錯誤,導致系統中斷。
⑨ JNI程序如何檢測C代碼的內存泄漏
經過測試,memwatch就可以直接用於JNI中的C代碼的內存檢測。程序在JNI調用後,就會在目錄下生成一個文件,裡面記錄了內存數據。
結論:JNI中C代碼的內存檢測和單純的C代碼的內存檢測沒什麼不同,不需要做特殊處理。
⑩ 在Linux中運行的C程序出現內存泄漏現象,怎麼解決
內存泄漏指由於疏忽或錯誤造成程序未能釋放已經不再使用的內存的情況。內存泄漏並非指內存在物理上的消失,而是應用程序分配某段內存後,由於設計錯誤,失去了對該段內存的控制,因而造成了內存的浪費。
可以使用相應的軟體測試工具對軟體進行檢測。
1. ccmalloc-Linux和Solaris下對C和C++程序的簡單的使用內存泄漏和malloc調試庫。
2. Dmalloc-Debug Malloc Library.
3. Electric
Fence-Linux分發版中由Bruce Perens編寫的malloc()調試庫。
4. Leaky-Linux下檢測內存泄漏的程序。
5. LeakTracer-Linux、Solaris和HP-UX下跟蹤和分析C++程序中的內存泄漏。
6. MEMWATCH-由Johan
Lindh編寫,是一個開放源代碼C語言內存錯誤檢測工具,主要是通過gcc的precessor來進行。
7. Valgrind-Debugging and profiling Linux programs, aiming at
programs written in C and C++.
8. KCachegrind-A visualization tool for the profiling data
generated by Cachegrind and Calltree.
9. Leak
Monitor-一個Firefox擴展,能找出跟Firefox相關的泄漏類型。
10. IE Leak Detector
(Drip/IE Sieve)-Drip和IE Sieve leak
detectors幫助網頁開發員提升動態網頁性能通過報告可避免的因為IE局限的內存泄漏。
11. Windows Leaks
Detector-探測任何Win32應用程序中的任何資源泄漏(內存,句柄等),基於Win API調用鉤子。
12. SAP Memory
Analyzer-是一款開源的JAVA內存分析軟體,可用於輔助查找JAVA程序的內存泄漏,能容易找到大塊內存並驗證誰在一直佔用它,它是基於Eclipse
RCP(Rich Client Platform),可以下載RCP的獨立版本或者Eclipse的插件。
13. DTrace-即動態跟蹤Dynamic
Tracing,是一款開源軟體,能在Unix類似平台運行,用戶能夠動態檢測操作系統內核和用戶進程,以更精確地掌握系統的資源使用狀況,提高系統性能,減少支持成本,並進行有效的調節。
14. IBM Rational PurifyPlus-幫助開發人員查明C/C++、託管.NET、Java和VB6代碼中的性能和可靠性錯誤。PurifyPlus
將內存錯誤和泄漏檢測、應用程序性能描述、代碼覆蓋分析等功能組合在一個單一、完整的工具包中。
15. Parasoft Insure++-針對C/C++應用的運行時錯誤自動檢測工具,它能夠自動監測C/C++程序,發現其中存在著的內存破壞、內存泄漏、指針錯誤和I/O等錯誤。並通過使用一系列獨特的技術(SCI技術和變異測試等),徹底的檢查和測試我們的代碼,精確定位錯誤的准確位置並給出詳細的診斷信息。能作為Microsoft
Visual C++的一個插件運行。
16. Compuware DevPartner for Visual C++ BoundsChecker
Suite-為C++開發者設計的運行錯誤檢測和調試工具軟體。作為Microsoft Visual Studio和C++ 6.0的一個插件運行。
17. Electric Software GlowCode-包括內存泄漏檢查,code
profiler,函數調用跟蹤等功能。給C++和.Net開發者提供完整的錯誤診斷,和運行時性能分析工具包。
18. Compuware DevPartner Java
Edition-包含Java內存檢測,代碼覆蓋率測試,代碼性能測試,線程死鎖,分布式應用等幾大功能模塊。
19. Quest JProbe-分析Java的內存泄漏。
20. ej-technologies JProfiler-一個全功能的Java剖析工具,專用於分析J2SE和J2EE應用程序。它把CPU、執行緒和內存的剖析組合在一個強大的應用中。JProfiler可提供許多IDE整合和應用伺服器整合用途。JProfiler直覺式的GUI讓你可以找到效能瓶頸、抓出內存泄漏、並解決執行緒的問題。4.3.2注冊碼:A-G666#76114F-1olm9mv1i5uuly#0126
21. BEA JRockit-用來診斷Java內存泄漏並指出根本原因,專門針對Intel平台並得到優化,能在Intel硬體上獲得最高的性能。
22. SciTech Software AB .NET Memory
Profiler-找到內存泄漏並優化內存使用針對C#,VB.Net,或其它.Net程序。
23. YourKit .NET & Java Profiler-業界領先的Java和.NET程序性能分析工具。
24. AutomatedQA AQTime-AutomatedQA的獲獎產品performance profiling和memory
debugging工具集的下一代替換產品,支持Microsoft, Borland, Intel, Compaq 和
GNU編譯器。可以為.NET和Windows程序生成全面細致的報告,從而幫助您輕松隔離並排除代碼中含有的性能問題和內存/資源泄露問題。支持.Net
1.0,1.1,2.0,3.0和Windows 32/64位應用程序。
25. JavaScript Memory Leak Detector-微軟全球產品開發歐洲團隊(Global Proct
Development- Europe team, GPDE)
發布的一款調試工具,用來探測JavaScript代碼中的內存泄漏,運行為IE系列的一個插件。