gpt4 book ai didi

c - 我是否将数组所有权从我的库函数传回给调用者?

转载 作者:行者123 更新时间:2023-12-03 15:29:07 28 4
gpt4 key购买 nike

我是从 Python 来到 C 的。 Python 有一种令人愉快的简单白手套方法来处理字符串。我在 C 中使用数组的次数越多,我就越觉得拥有某些特性会有多方便。我决定创建一个库来执行此操作,而不是每次我需要执行特定操作时都编写循环来执行此操作。

所以,假设我有一个库,调用看起来像这样:

char* new_array = meatSlicer(old_array, element_start);

我将指针传递到我想要更改的数组,期望指针返回,并指示要切片的元素。

如果 meatSlicer(是的,我是一个错误命名的傻瓜)返回一个指向在切片器中本地创建的数组的指针,该指针将是一个错误的指针。所以,在 meatSlicer() 中我有这个:

    ... manipulation before the below ...

char *heap_the_Array; /* put it on the heap to pass it back to caller */
heap_the_Array = malloc((size + 1) * sizeof(char));

int i;
for (i = 0; i <= (size + 1); i++){ /* make it so... again */

heap_the_Array[i] = newArray[i]; /* newArray is the local */

}

return heap_the_Array; /* return pointer */

我的问题是,我是否正确地将所有权归还给调用函数以便它可以free() 新数组?传递指向堆上数组的指针是否足够?

最佳答案

是的,将局部变量复制到内存的 malloc 区域效果很好。您可以用 memcpy 的调用替换循环以减少代码大小。写

memcpy(heap_the_Array, newArray, size+1);

代替

int i;                
for (i = 0; i <= (size + 1); i++){ /* make it so... again */
heap_the_Array[i] = newArray[i]; /* newArray is the local */
}

关于c - 我是否将数组所有权从我的库函数传回给调用者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14388239/

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