为什么可以释放/删除返回的对象,但是不能释放/删除通过参数输入的对象?

Fir*_*oft -7 c memory-management

据我所知,

int * createArray ( void )
{
     int * arr = (int*)malloc(3*sizeof(int));
     arr[0] = 69; arr[1] = 69; arr[2]; 
     return arr;
}

int main ()
{
    int * myArray = createArray();
    free myArray;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

将释放数组的所有内存{69, 69, 69}在指向的内存地址myArray,但是

void freeArray ( int * A )
{
     free A;
}

int main ()
{
    int * myArray = (int*)malloc(3*sizeof(int));
    myArray[0] = 69; arr[1] = 69; arr[2] = 69; 
    freeArray(myArray);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不会做同样的事情.这让我感到困惑的原因是因为在这两种情况下你都在处理原始指针的副本,但是从该副本中删除指向的对象仅适用于第一种情况.这似乎是一种不一致,但也许我完全错了.有人可以为我清除这个吗?

Sou*_*osh 7

不会做同样的事情.

你为什么这么想?

也许,因为之后freeArray(myArray);,你能够访问它,对吧?

嗯,这是未定义行为的结果 .

顺便说一句,在你的第一个片段中,

free myArray;
Run Code Online (Sandbox Code Playgroud)

应该

free(myArray);
Run Code Online (Sandbox Code Playgroud)