我有以下变量"places“,它是字符串位置的动态数组的ptr:
uint32_t*场所;
我希望我的函数返回一个重复的类型指针(uint32_t*)
我目前的尝试是:
uint32_t arrCpy = malloc((numberOfElements) * sizeof(uint32_t));
memcpy(arrCpy, places, sizeof(uint32_t*)*numberOfElements);
return arrCpy;请解释我做错了什么,以及如何解决这个问题?我收到了一个分割错误使用gcc。
更正:目标是获取一个uint32_t并创建一个重复的uint32_t“注意该函数返回键的位置数组的副本,而不是存储在哈希表中的原始数组的指针。原因是返回指向原始数组的指针将是危险的,因为它允许用户直接修改原始数组。”
发布于 2020-11-10 02:24:37
uint32_t* places;不是一个指针数组,它是一个指向uint32_t的指针,一个数字。通常,要有一个something数组,就应该有一个指向something的指针。因此,您可能希望将您的places声明为uint32_t** places;,arrCpy也是如此。
uint32_t** dup(uint32_t** places, int numberOfElements)
{
uint32_t **arrCpy = malloc((numberOfElements) * sizeof(uint32_t*));
memcpy(arrCpy, places, sizeof(uint32_t*)*numberOfElements);
return arrCpy;
}-编辑--
如果要复制uint32_t数组
uint32_t* dup(uint32_t* places, int numberOfElements)
{
uint32_t *arrCpy = malloc((numberOfElements) * sizeof(uint32_t));
memcpy(arrCpy, places, sizeof(uint32_t)*numberOfElements);
return arrCpy;
}您可以看到,无论要复制哪个数组,都要创建一个指针,分配它的内存,然后复制它,然后返回该指针。
-编辑--
完整的代码
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
int* dup(int* places, int n)
{
int *arrCpy = malloc((n) * sizeof(int));
memcpy(arrCpy, places, sizeof(int)*n);
return arrCpy;
}
void main()
{
int a[3] = {1,2,3};
int i;
for(i=0; i<3; i++)
{
printf("%u, ", a[i]);
}
printf("\n");
// print 1,2,3
int *b = dup(a, 3);
a[0]=100;
for(i=0; i<3; i++)
{
printf("%u, ", a[i]);
}
printf("\n");
// print 100,2,3
for(i=0; i<3; i++)
{
printf("%u, ", b[i]);
}
printf("\n");
//print 1,2,3
}https://stackoverflow.com/questions/64761912
复制相似问题