具体来说,我的程序使用指向char的指针。程序本身运行平稳,但每个循环我泄漏大约8kb的数据。正如我发现的那样,我的错误在于我使用这些char指针的风格。它是这样的:
Draw(char *what1, char* onWhat1); //this is declaration
DrawAgain(char *what2, char* onWhat2); //declaration too
// both take two directories to two images, so i call it like this:
Draw("C:\a.bmp", "C:\b.bmp"){
//so what is pointer to a.bmp onWhat is pointer to b.bmp so i use them like this:
DrawAgain(what1, onWhat1);
}
程序中没有其他泄漏(我删除了几乎所有内容以找到它)。所以我的问题是:“我如何释放这个* char内存?如果我没有分配它,只要输入就可以释放它。”
答案 0 :(得分:4)
String literals,因为它们不是动态分配的。泄漏不在于示例代码。从C ++ 03,§5.13.4-1字符串文字:
普通的字符串文字具有类型“ n
const char
的数组”和静态存储持续时间(3.7)[...]宽字符串文字有输入“ nconst wchar_t
数组”并具有静态存储持续时间
答案 1 :(得分:1)
没有泄漏。如果您不使用new
分配内存,除非另有明确说明,否则delete
不对您负责。通常,任何分配内存的人都有责任释放它。也就是说,许多流行的图书馆仍然存在泄密。如果char*
是一个在堆上动态分配的数组或类似数组,则需要将其从分配位置删除(而不是在这些函数中)。
的问候,
丹尼斯M。
答案 2 :(得分:0)
代码中还有一个问题。我创建了一个OpenCV点,然后从函数返回值,它看起来像这样:
CvPoint Value;
bool Calculations( CvPoint &worker); //declaration
//So i give this function Value and take it out like this:
Calculations(Value){
worker = someValue;
}
值熄灭,但我不会调用任何free()或任何deallocator;
答案 3 :(得分:0)
请发布完整的代码,以便我们找到问题所在。
您也可以查看:
Draw("C:\a.bmp", "C:\b.bmp")
'\'逃避'a'各自'b'。