可能的内存泄漏:new char[strlen()]
Possible Memory Leak: new char[strlen()]
这是一个
相当基本的问题,我很确定我知道答案,但看到错误的后果是一个段错误,我想我应该问。我已经以以下方式使用 strlen()
和 new char[]
运算符很长一段时间了,只是注意到一些抛出危险信号的东西:
void genericCopy(char *somestring, char *someOtherString) {
someOtherString = new char[strlen(somestring)];
strcpy(someOtherString,somestring);
}
我的问题是,看到字符串应该以 null 结尾,我应该这样做吗:
void genericCopy(char *somestring, char *someOtherString) {
someOtherString = new char[strlen(somestring)+1];
strcpy(someOtherString,somestring);
someOtherString[strlen(someOtherString)] = ' ';
}
到目前为止,我从未遇到过第一种方法的问题,但这并不意味着我做对了。由于 strlen()
返回的长度是字符串中没有空终止符的字符数,因此 new 不会为"/0"保留空间......至少我不认为是。
首先,你应该知道你的这个函数写起来毫无意义,只需使用strdup
(如果您的系统上可用)。
但是,是的,您需要一个额外的字节来存储