注意:這不是家庭作業IT與提供給我們按我們的教授模擬考試來幫助我們準備我們的考試寫作,檢查在C內存泄漏++測試用例
我目前正在研究編程考試。在他們給我們的樣本測試之一中,我們有以下問題:
假設您已獲得一個模板化容器,該容器包含無序的對象集合。
template <typename T>
class Container {
public:
void insert(T *op);
// EFFECTS: inserts the object pointed to by op into
// the container
T *remove();
// EFFECTS: removes an object from the Container, and
// returns a pointer to it. Returns NULL if no
// objects remain in the Container.
// Note: the implementation can choose which
// object to return if more than one exists.
Container(); // ctor
Container(const Container &l); // copy ctor
Container &operator=(const Container &l); // assignment
~Container(); // dtor
private:
...
};
請注意,這只是接口;爲簡潔起見,省略了實施細節。然而,你可能會認爲實現是基於節點的;鏈接的節點集合 保存對象。
您懷疑析構函數的實現不滿足最不變式的保守規則,而是正在泄漏內存。寫一個驗收測試(類似於項目4)來檢查這種情況。您必須提供合適的包含類型和執行測試的主體。
請注意,您不能依賴任何語言未定義的行爲,您可能不需要 假定您有來自Project 5的altnew分配器可供您使用,並且您可能不會 覆蓋delete操作符。提示:您可以使用全局變量。
不過,我覺得是這樣的:
#include <iostream>
using namespace std;
int *p = NULL;
void leak() {
int *num = new int(5);
p = num;
delete num;
}
int main() {
if ((*p = 6)) {
cout << "Memory leak\n";
} else {
cout << "No Leak\n";
}
}
這背後的基本思想是我,雖然我寫不出來,我還沒有分配的內存空間。在編譯這個測試代碼時,雖然它的工作很好,但顯然你可以。有關如何編寫這樣的測試用例的想法?
自己所想的測試依賴於不確定的行爲。當您訪問free'd內存時會發生什麼情況未定義。 – 2009-12-16 20:16:07
我想你可以用'Container <使用全局變量計算它本身的實例>'進行測試。 – UncleBens 2009-12-16 20:22:09
你可能想解釋Project 5中的「altnew」分配器是什麼。也許這爲您提供了跟蹤分配的工具。 – 2009-12-16 20:34:20