2015-03-08 125 views
0

这里只是一个疑问。我有2个指针的指针.. ** M1,**平方米和m2被初始化为: -复制指针值

m2 =(int **) calloc(5, sizeof(int *)); 
for(int i=0; i<5; i++) 
m2[i] = (int *)calloc(8, sizeof(int)); 

和指针具有值..就像二维数组..在每个位置。

可我就是不喜欢 -

m1 = m2; 
free(m2); // then use m1 as m2 ?? 

真的很抱歉,如果它的一个简单的问题..和请什么正确的方法复制到M2和M1 M2自由。 谢谢。

+0

关于“)释放calloc(”的调用1)C,不投返回值2)经常检查返回值,以确保手术很成功(!= NULL) – user3629249 2015-03-11 15:18:20

+0

感谢通知:)&当然我知道它.. – user4647543 2015-03-13 17:42:35

回答

0

不,m1 = m2只会让m1指向与m2相同的内存。它不会复制数组。

当你然后去释放指向m1m2的内存时,两个指针都将失效。

btw free(m2)只取消分配数组int*。您需要解除分配在m2int阵列,以及:

for(int i=0; i<5; i++) 
    free(m2[i]); 
free(m2); 
+0

谢谢。所以我需要分别为m1分配并分配每个元素?? – user4647543 2015-03-08 20:10:31

+0

是的。您也可以使用['memcpy'](http://www.cplusplus.com/reference/cstring/memcpy/)来代替手动分配。 – emlai 2015-03-08 20:15:23

+0

我很好。我会研究一下。另一个小疑问。如果我将指针的地址传递给一个函数,并将该内存分配给该函数中的指针,那么在函数从堆栈中消失后它是否仍然存在?我可以使用调用函数中分配的内存吗? – user4647543 2015-03-08 22:03:01