大佬教程收集整理的这篇文章主要介绍了C何时分配和释放内存 – 在函数调用之前,在函数调用之后……等等,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个我创建的功能,将验证一些输入.在下面的简单示例中,它只是忽略空格:
int validate_input(const char *input_line,char** out_value){ int ret_val = 0; /*false*/ int length = strlen(input_linE); out_value =(char*) malloc(sizeof(char) * length + 1); if (0 != length){ int number_found = 0; for (int x = 0; x < length; x++){ if (input_line[x] != ' '){ /*ignore space*/ /*get the character*/ out_value[number_found] = input_line[x]; number_found++; /*increment counter*/ } } out_value[number_found + 1] = '\0'; ret_val = 1; } return ret_val; }
我应该在调用函数之前执行此操作而不是在函数内部为out_value分配内存,并始终期望调用者在传入函数之前分配内存?根据经验,在函数返回之前是否应始终释放在函数内部分配的任何内存?
1 /只要您知道需要,就可以在需要时分配内存.这将允许您在做太多工作之前捕获内存不足错误.
2 /每个已分配的内存块都有一个责任属性.当责任通过函数接口时应该很清楚,此时释放该内存的责任随内存一起传递.这将保证某人有明确规定的释放内存的要求.
在您的特定情况下,如果您希望将值返回给调用者,则需要传入双字符指针:
int validate_input (const char *input_line,char **out_value_ptr) { : : *out_value_ptr =(char*) malloc(length + 1); // sizeof(char) is always 1 : : (*out_value_ptr)[number_found] = input_line[x]; : :
只要您清楚地说明函数的期望,您就可以在调用者或函数本身中分配内存.因为你知道所需的尺寸,所以我更喜欢这个功能.
但请记住,您可以允许两种选择.换句话说,如果函数传递了指向NULL的char **,请让它分配内存.否则它可以假设调用者已经这样做了:
if (*out_value_ptr == NULL) *out_value_ptr =(char*) malloc(length + 1);
以上是大佬教程为你收集整理的C何时分配和释放内存 – 在函数调用之前,在函数调用之后……等等全部内容,希望文章能够帮你解决C何时分配和释放内存 – 在函数调用之前,在函数调用之后……等等所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。