C++ new一个数组时,指针移动程序崩溃问题

来源:互联网 发布:淘宝商城怎么开 编辑:程序博客网 时间:2024/06/01 10:28
问题代码:
#include <iostream>using namespace std;int main(){int a[] = { 12, 42, 6, 17, 32, 4, 19 };int *pia = new int[7];for (size_t i = 0; i < 7; ++i){pia[i] = a[i];}for (size_t i = 0; i < 6;++i){cout << *pia++ << " ";}cout << endl;delete [] pia;return 0;}

由于在输出*pia时用了++,改变了pia指针的位置,使得在delete [] pia时,无法找到头指针的位置,无法delete。


可以通过记录pia的初始位置,在输出完后,再复原

#include <iostream>using namespace std;int main(){int a[] = { 12, 42, 6, 17, 32, 4, 19 };int *pia = new int[7];int *pia_copy = pia;//记录pia的初始位置for (size_t i = 0; i < 7; ++i){pia[i] = a[i];}for (size_t i = 0; i < 7;++i){cout << *pia++ << " ";}pia = pia_copy;//复原pia的位置cout << endl;delete [] pia;return 0;}



0 0