实验三:遗漏

修复vs下内存溢出的问题
main
lensfrex 2 years ago
parent b36a65b23f
commit 240fc8f634
Signed by: lensfrex
GPG Key ID: 0F69A0A2FBEE98A0
  1. 6
      work20220407/string/String.cpp

@ -112,10 +112,12 @@ void String::copyData(const char *source, int sourceLength) {
this->data = nullptr; this->data = nullptr;
length = 0; length = 0;
allocSize = 0; allocSize = 0;
return;
} }
// 如果源字符串长度超过了本对象已分配的字符数组大小则重新分配长度合适的字符数组 // 如果源字符串长度超过了本对象已分配的字符数组大小则重新分配长度合适的字符数组
if (allocSize < sourceLength) { if (allocSize <= sourceLength) {
allocSize = sourceLength + 1; allocSize = sourceLength + 1;
delete[] data; delete[] data;
@ -155,7 +157,7 @@ void String::addString(const char *source, int sourceLength) {
} }
// 如果拼接后字符长度超过已分配的内存大小,则重新分配data内存大小 // 如果拼接后字符长度超过已分配的内存大小,则重新分配data内存大小
if (allocSize < (length + sourceLength + 1)) { if (allocSize <= (length + sourceLength + 1)) {
// 保存拼接前的原数据,以便重新分配足够的内存 // 保存拼接前的原数据,以便重新分配足够的内存
char *old = new char[length + 1](); char *old = new char[length + 1]();
strcpy(old, data); strcpy(old, data);

Loading…
Cancel
Save