【问题标题】:Copy Pointer values复制指针值
【发布时间】:2015-05-09 23:16:25
【问题描述】:

这里只是一个疑问。我有 2 个指向指针的指针.. **m1 , **m2 和 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 的正确方法。 谢谢。

【问题讨论】:

  • 关于 C 中对 'calloc()' 的调用 1) 不要强制转换返回值 2) 始终检查返回值以确保操作成功 (!= NULL)
  • 感谢您的告知 :) & 我当然知道..

标签: c pointers multidimensional-array dynamic-arrays


【解决方案1】:

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

当您释放m1m2 指向的内存时,两个指针都将失效。

顺便说一句,free(m2) 只会释放int* 的数组。您还需要释放m2 中的int 数组:

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

【讨论】:

  • 谢谢。所以我需要分别为 m1 分配并单独分配每个元素??
  • 是的。除了手动分配,您还可以使用memcpy
  • 我很高兴。我会调查的。另一个小疑问。如果我将指针的地址传递给函数并将内存分配给该函数中的指针..那么在函数从堆栈中消失后它是否仍然存在?我可以使用调用函数中分配的内存吗?
  • 如果内存是动态分配的,是的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 2016-12-05
  • 2013-05-04
  • 1970-01-01
  • 1970-01-01
  • 2021-02-07
相关资源
最近更新 更多