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()使用新数组?将指针传递给堆上的数组是否足够?
是的,将局部变量复制到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)
| 归档时间: |
|
| 查看次数: |
202 次 |
| 最近记录: |