美文网首页C++我爱编程
C++ 用函数申请一块内存

C++ 用函数申请一块内存

作者: FlyingPenguin | 来源:发表于2018-04-13 20:02 被阅读21次

    一种典型的使用错误

    int getbuffer(char *out_szBuffer)
    {
        if (NULL == out_szBuffer)
        {
            out_szBuffer = new (std::nothrow) char[1024];
            if (NULL == out_szBuffer)
            {
                return -1;
            }
        }
    
        return 0;
    }
    
    ...
    
        char *szBuffer = NULL;
        int nRet = getbuffer(szBuffer);
        if (nRet == 0)
        {
            strcpy(szBuffer, "Hello World!!"); // 这里会崩溃 因为szBuffer是NULL的
            printf(szBuffer);
        }
    

    int getbuffer(char *out_szBuffer)函数传入的是NULL, 返回的也是NULL.

    正确使用方式

    int getbuffer(char **out_szBuffer)
    {
        if (out_szBuffer)
        {
            (*out_szBuffer) = new (std::nothrow) char[1024];
            if (NULL == (*out_szBuffer))
            {
                return -1;
            }
        }
    
        return 0;
    }
    
    int releasebuffer(char **out_szBuffer)
    {
        if (out_szBuffer)
        {
            delete [] (*out_szBuffer);
            (*out_szBuffer) = NULL;
        }
    
        return 0;
    }
    
    ...
        char *pszBuffer = NULL;
        printf("#1 addr of &pszBuffer : 0x%p\n", &pszBuffer);
        int nRet = getbuffer(&pszBuffer);
        printf("#2 addr of &pszBuffer : 0x%p\n", &pszBuffer);
        if (nRet == 0)
        {
            strcpy(pszBuffer, "Hello World!!\n"); 
            printf(pszBuffer);
        }
    
        releasebuffer(&pszBuffer);
        printf("#3 addr of &pszBuffer : 0x%p\n", &pszBuffer);
    
    

    运行结果:


    结果

    其实这也不是一种良好的使用习惯,因为如果程序员没有释放,会造成内存泄漏的问题
    这里只是一个语言练习的小demo。

    相关文章

      网友评论

        本文标题:C++ 用函数申请一块内存

        本文链接:https://www.haomeiwen.com/subject/nnshkftx.html