char指针中的内存泄漏

时间:2011-03-05 21:40:09

标签: c++ pointers memory memory-leaks

具体来说,我的程序使用指向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内存?如果我没有分配它,只要输入就可以释放它。”

4 个答案:

答案 0 :(得分:4)

不应释放

String literals,因为它们不是动态分配的。泄漏不在于示例代码。从C ++ 03,§5.13.4-1字符串文字:

  

普通的字符串文字具有类型“ n const char的数组”和静态存储持续时间(3.7)[...]宽字符串文字有输入“ n const 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'。