首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Calloc内部函数

Calloc内部函数
EN

Stack Overflow用户
提问于 2010-02-10 02:30:39
回答 5查看 2.3K关注 0票数 2

看看刚刚被问到的问题:Inconveniences of pointers to static variables做这样的事情会被认为是糟糕的实践吗?

代码语言:javascript
复制
char* strpart(char* string, int start, int count)
{
    char* strtemp; 
    int i = 0; int j = 0;
    int strL = strlen(string);

    if ( count == 0 )
    {
        count = strL;
    }

    strtemp = (char*) calloc((count + 1), sizeof(char));
    for ( i = start; i < (start+count); i++ )
    {
        strtemp[j] = string[i];
        j++;
    }
    return strtemp;
}

抱歉,它写得太快了,但是它的基本原理是-当不在函数中使用静态缓冲区时,在函数中分配内存是不是不好的做法?我想是的,因为它不会被释放,不是吗?不过我觉得我应该问一下。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-02-10 02:34:17

这不是一个糟糕的实践,但它很容易造成内存泄漏(调用者必须记住释放内存)。

我喜欢做的一件事是使用命名约定来指示可以分配哪些函数。例如,我会将该函数命名为:

代码语言:javascript
复制
char* strpart_alloc(char* string, int start, int count)
票数 7
EN

Stack Overflow用户

发布于 2010-02-10 02:33:28

在函数中动态分配内存总是可以的,只要您将指向该内存的指针返回给外部世界,这样其他东西就可以释放它,或者在函数中自己释放它。

票数 4
EN

Stack Overflow用户

发布于 2010-02-10 02:32:16

好吧,这很危险。如果可能的话,我会尽量避免它。

你的假设是正确的-内存不会自动释放。

问题是,这里的返回值是堆上分配的内存,函数的调用者必须记得释放内存。您在这里分配的内存不会(由您)释放。对API的用户进行限制总是不好的主意。

有时(很少)这是无法避免的,所以如果你这样做了,一定要清楚地记录下来。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2231477

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档