gpt4 book ai didi

c - 如何在 C 中复制指针数组? (uint32_t)

转载 作者:行者123 更新时间:2023-12-04 19:33:40 26 4
gpt4 key购买 nike

我有以下变量“places”,它是字符串位置动态数组的指针:
uint32_t* 地点;
我希望我的函数返回类型为 (uint32_t*) 的 DUPLICATE 指针
我目前的尝试:

uint32_t arrCpy = malloc((numberOfElements) * sizeof(uint32_t));
memcpy(arrCpy, places, sizeof(uint32_t*)*numberOfElements);
return arrCpy;
请解释我做错了什么以及如何解决这个问题?我收到使用 gcc 的段错误。
更正:
目标是获取一个 uint32_t 并制作一个重复的 uint32_t
"请注意,该函数返回一个重复
键的位置数组,而不是指向存储在哈希表中的原始数组的指针。这样做的理由是
返回指向原始数组的指针会很危险,因为它允许用户直接修改原始数组
大批。”

最佳答案

uint32_t* places;

I would like for my function to return a DUPLICATE (not the same)pointer which points to the same array of strings.


如果你写的正是你需要的,它只是一个指向同一个数组的指针。但它不是一个字符串数组,它是一个指向 32 位的指针数组 int
  • 如果您需要将指针传递给现有的指针数组,只需编写
  • 即可。
        uint32_t*     to_the_same_places = places;
    places有指针数组的起始地址,所以你只需要复制 places .
  • 如果您需要复制指针数组,但指向相同的位置,那么您在每个程序开始时都会遇到类似的情况:您需要知道places中有多少个指针.这就是为什么main()被宣布为
  • int    main(int argc, char** argv);
    argc正好与指针的数量一起出现,因此系统可以构建数组并且您可以迭代它们。
    如果您知道大小并且需要复制所有内容
    这是常见的情况,作为 places 的来源地址可能超出范围并使 places 的完整 block 无效。指着。由于新数组将指向相同的位置,因此您需要分两步进行:
  • 您需要分配一个区域来保存所有指针。大小是指针的数量乘以机器中指针的大小。指针在内存中对齐,因此您可以使用 memcpy() 一次复制整个 block
  • 您需要创建一个指向新数组的指针。无需使用uint32_t**

  • 您可以颠倒这些步骤。
    但是你需要知道有多少个指针 places指向,并且可能更实用,只需按照系统方式编写一对 int argc, char** argv

    关于c - 如何在 C 中复制指针数组? (uint32_t),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64761912/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com