我是否将数组所有权从库函数传递给调用者?

d0r*_*ife 2 c heap malloc pointers ownership

我是从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 */
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 5

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

memcpy(heap_the_Array, newArray, size+1);
Run Code Online (Sandbox Code Playgroud)

代替

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