0
下面是代碼,該程序導致內存泄漏。我不知道它是如何發生的?內存泄漏如何發生?
#include <iostream>
#include <memory>
#include <stdexcept>
using namespace std;
void test(shared_ptr<string> &ptr, int num) {
cout << "pass test:" << *ptr << " " << num << endl;
}
int fun() {
throw new runtime_error("runtime error");
return 0;
}
int main() {
try {
// test(static_cast<shared_ptr<string> >(new string("hello")), fun());
// Solution
shared_ptr<string> sps(new string("h"));
test (sps, fun());
} catch (runtime_error *e) {
cout << e->what() << endl;
}
return 0;
}
我使用的valgrind 測試內存泄漏。
==4726==
==4726== HEAP SUMMARY:
==4726== in use at exit: 54 bytes in 2 blocks
==4726== total heap usage: 6 allocs, 4 frees, 248 bytes allocated
==4726==
==4726== LEAK SUMMARY:
==4726== definitely lost: 16 bytes in 1 blocks
==4726== indirectly lost: 38 bytes in 1 blocks
==4726== possibly lost: 0 bytes in 0 blocks
==4726== still reachable: 0 bytes in 0 blocks
==4726== suppressed: 0 bytes in 0 blocks
==4726== Rerun with --leak-check=full to see details of leaked memory
==4726==
==4726== For counts of detected and suppressed errors, rerun with: -v
==4726== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 2 from 2)
我認爲sps
會刪除自身時excption由fun()
誘發。更重要的是,test()
中對shared_ptr的引用將不會分配內存。
智能指針的行爲很奇怪。
不要用'new'拋出異常,C++不是java! –