本文共 674 字,大约阅读时间需要 2 分钟。
问题代码:#includeusing 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的初始位置,在输出完后,再复原
#includeusing 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;}
转载地址:http://gjmii.baihongyu.com/