在数组中移动指针

时间:2013-11-25 16:59:04

标签: c++

此程序崩溃,我找不到任何有关获取数组内容和移动指针的非法行为。有什么问题?

#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;
}

3 个答案:

答案 0 :(得分:6)

您正在更改p指针,然后您尝试在原始分配的内存后删除内存:

delete [] p;

将原始指针保存到某个临时迭代器指针并递增它,而不是原始指针:

    int *t = p;
    for(int i=0 ; i<20 ;i++ )
    {
        printf("%d ",*t );
        t++;
    }

答案 1 :(得分:2)

您正在删除指向内存块后指向下一个元素的指针。

答案 2 :(得分:2)

将数组的起始指针保存在另一个指针中并删除末尾的旧指针。