【发布时间】:2012-11-26 15:07:29
【问题描述】:
我正在实现一个函数,我希望它是一个“库质量”函数:
char** str_cat(char** const str, const char * const other ){
if(str==NULL)
return NULL;
if(other==NULL)
return str;
if(*str==NULL)
return str_cpy(str,other);
char* tmp=(char*)calloc(1,strlen(*str)+strlen(other)+1);
if(tmp==NULL)
return NULL;
strcat(strcpy(tmp,*str),other);
*str=tmp;
return str;
}
这是 strcat() 函数的一个版本(不同的签名),可处理任何极端用例。 但是,我的内存不足故障处理方法不适用于大量使用丰富的 str_xxx() API 库的大型应用程序。
问题:有没有更好的解决方案?
【问题讨论】:
-
“不会很好”是什么意思?另外,我认为你有一些内存泄漏?
-
@Xymotech:内存泄漏-我猜问题是我没有释放第一个参数并分配一个新块。如果是这样,因为第一个参数是 char**(指向字符串的指针),而且它可能是指向代码段字符串的指针,所以我选择不处理它。
-
好吧,如果您在担心内存泄漏之前担心内存不足的情况,那么我认为您的优先级混淆了。
-
@Xymotech:“不会很好” - 我认为也许在低级别上有更好的解决方案。
-
在我对 API 的定义中,这是用户对释放该块的不负责任(再次:这是 char** 原始块指针没有丢失,而且,我无法释放代码段块:))。
标签: c memory memory-management out-of-memory