【发布时间】:2017-10-31 19:44:01
【问题描述】:
void append(char*& input,const char* str){
size_t input_len = strlen(input);
size_t str_len = strlen(str);
size_t len = input_len + str_len;
char* temp = new char[len + 1];
memcpy(temp, input, input_len);
memcpy(temp + input_len, str, str_len);
// **#3** delete[] input;
temp[len] = '\0';
input = temp;
}
int main(){
char* s = "string";
cout << s << endl;
append(s, " hello"); // **#1** not initialized by an array
cout << s << endl;
append(s, " welcome"); // **#2** now having an array
cout << s << endl;
}
我想在分配新数组后删除以前分配的数组(#3)。但第一次 (#1) 将其称为具有动态分配的指针。
如何避免此类内存泄漏?
有没有办法用“新”识别内存分配?还是其他?
if(p == new char[])...
看看这个,http://www.cplusplus.com/reference/cstring/strcat/它改变了原来的字符串
【问题讨论】:
-
简短回答:您可以通过释放之前分配的内存来避免内存泄漏。
-
简短的回答:不要使用指针!在您的情况下,使用字符串,您应该改用
std::string。 -
一般来说,
std::unique_ptr查一下。 en.cppreference.com/w/cpp/memory/unique_ptr -
如果您仍然坚持使用原始指针,而不是通过引用传递
input并修改它指向的位置,而是 返回 新指针,并将input保留为.然后让调用者使用返回的指针释放内存。 -
std::string 的追加函数名为 +。
标签: c++ pointers memory-management memory-leaks