此程序崩溃,我找不到任何有关获取数组内容和移动指针的非法行为。有什么问题?
#include <iostream>
#include <stdint.h>
using namespace std;
int main( int argc, char ** argv ) {
int * p = new int [20];
for(int i=0 ; i<20 ;i++ )
{
p[i]=i;
}
for(int i=0 ; i<20 ;i++ )
{
printf("%d ",*p );
p++;
}
delete [] p;
return 0;
}
答案 0 :(得分:6)
您正在更改p
指针,然后您尝试在原始分配的内存后删除内存:
delete [] p;
将原始指针保存到某个临时迭代器指针并递增它,而不是原始指针:
int *t = p;
for(int i=0 ; i<20 ;i++ )
{
printf("%d ",*t );
t++;
}
答案 1 :(得分:2)
您正在删除指向内存块后指向下一个元素的指针。
答案 2 :(得分:2)
将数组的起始指针保存在另一个指针中并删除末尾的旧指针。