更改指针(C)时数组元素会发生什么?

时间:2016-09-29 08:05:01

标签: c arrays pointers

所以我知道这个问题很可能在之前被问过,但经过近一个小时的搜索,我决定问一切。将我指向一个已经得到回答的同意问题将非常感激。

然后,用基本的C编程,我很好奇数组元素在更改其指向别的东西时会发生什么?没有先释放它是否安全?例如,

int main()
{
    const int size = 3;
    int *p_arr = malloc(size * sizeof(int));

    for( int i=0; i<size; i++)
        p_arr[i] = i;

    int arr[size] = {0,0,0};

    p_arr = arr; // safe!?

    // What happens to the data previously allocated
    // and stored in *p_arr? Should one first call,
    // free(p_arr)
    // and then reallocate ..?
}

基本上,更改指针会将数据{0,1,2}留在内存中。这没关系吗?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

数据没有任何变化,除了它变得无法访问(“泄露”),因此内存永远浪费,在程序终止之前(通常)它不能用于其他任何事情。

不要这样做,泄漏记忆是非常糟糕的做法。

当你不再需要记忆时,你应该free()

此外,可以写下分配:

p_arr = malloc(size * sizeof *p_arr);

删除int类型的重复,并将大小锁定为实际变量。这至少在某种程度上更安全​​。

答案 1 :(得分:0)

数组{0,1,2}已经在内存中,但除非再次指向指向数组头地址的指针,否则无法获取它。