c - 重新分配数组索引

标签 c arrays malloc realloc

有一个数组:

type **a;

a[0][data_0]
a[1][data_1]
a[2][data_2]
a[n][data_n]

通过执行以下操作扩展此类数组时:

  1. a 上的 realloc()sizeof(type*) * (n + 1)
  2. malloc() (*a[n]) 适合 data_n,其中 data_n 的大小可变.

arealloc() 是否存在问题?

正如a[2]中那样,即使a在内存中移动,或者该链接可能丢失,它也始终指向data_2

据我了解,我最终在内存中得到了这样的结果:

         Address               Address
a[0] => 0x###131, (*a[0]) => 0x####784
a[1] => 0x###135, (*a[1]) => 0x####793
a[2] => 0x###139, (*a[2]) => 0x####814

realloc()之后我可能会得到类似的结果:

         Address               Address
a[0] => 0x###216, (*a[0]) => 0x####784
a[1] => 0x###21a, (*a[1]) => 0x####793
a[2] => 0x###21e, (*a[2]) => 0x####814
a[n] => 0x###zzz, (*a[n]) => 0x####yyy

这是正确的吗? data_n 段被单独保留,或者它们也可以被移动吗?

最佳答案

Is this correct? The data_n segments are left alone, or could they also get moved?

是的,a[i]的值,对于0 <= i < n被复制到新位置,因此指针指向相同的 data_i并且这些不会被移动。

Could there be some issue with realloc() of a?

当然,一个realloc总是会失败并返回 NULL ,所以你永远不应该这样做

a = realloc(a, new_size);

但是使用临时变量来存储realloc的返回值.

关于c - 重新分配数组索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12801105/

相关文章:

php - 将 JSONArray 从 Android 传递到 PHP

c - 动态 C 字符串 (char*) 奇怪的行为

c - 在 C 中的自制字符串结构中使用 realloc - 可能存在内存泄漏?

c - 这是什么意思? #define TIMER_PASTE_B(lft,t,rgt) lft##t##_##rgt

c - 我应该如何使用 libpng 库将 RGBA 位图转换为 PNG 并将 PNG 转换回 RGBA 位图

c - statfs 显示所有路径名的相同输出

Ruby:对象/类数组

将堆指针传递给函数时,cppcheck 无法检测到泄漏?

c - 双指针和单指针共享同一个变量

c++ - malloc() 和 free() 是如何工作的?