C++ realloc后数据改变的问题

由于之前没有使用过realloc函数,用之前做了一个测试。

long * a = new long[5];

for (long i = 0; i < 5; i++) {
    a[i] = i;
}

for (long i = 0; i < 5; i++) {
    cout << a[i] << endl;
}

cout << endl;

img

a = (long *)realloc(a, 6);

a[5] = 6;

for (long i = 0; i < 6; i++) {
    cout << a[i] << endl;
}

最简单的一个代码,从一个原本为[0 1 2 3 4]的long数组扩展到长度为6的[0 1 2 3 4 6]的数组,并且打印两个数组。然后输出结果:

realloc() 函数用来重新分配内存空间,其原型为:
void* realloc (void* ptr, size_t size);
指针 ptr 必须是在动态内存空间分配成功的指针,形如如下的指针是不可以的:int *i; int a[2];会导致运行时错误,可以简单的这样记忆:用 malloc()、calloc()、realloc() 分配成功的指针才能被 realloc() 函数接受。

不好意思不太提问,排班有点乱了,输出结果在中间,realloc后的a[1],a[2]打印出了奇怪的东西……