最近在写串的时候总会遇到这样的问题,调试的时候程序意外退出,导致后面申请的 char * 数组带有之前的元素
比如
auto *arr {new char[10]}; //arr = ""
for(auto i {0}; i < 10; ++i) {
arr[i] = 'a' + i; //arr = "abcdefghij"
}
当程序意外退出的时候,arr 可能没有来得及释放,导致下一次申请数组的时候,就算只申请 5 个空间,当遇到刚好内存相同的时候,新的数组就会是 "abcdefghij"
auto *arr {new char[5]}; //当内存没来得及释放,arr = "abcdefghij"
之前尝试过在新的程序开始之前,用老的程序申请一个很大的空间并且释放
#include <iostream>
int main(int argc, char *argv[]) {
auto *arr {new char[100000]};
delete []arr;
return 0;
}
但是只有第一次释放之后是正常的,接下来又会出现上面的情况
如果遇到这种情况,各位有什么好的解决方案吗?
C/C++ 中,读取一个未赋值(且没有定义默认值)的量是未定义行为
未定义行为是错误的行为。
正确的写法是