美文网首页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++ 用函数申请一块内存

    一种典型的使用错误 int getbuffer(char *out_szBuffer)函数传入的是NULL, 返回...

  • [C++之旅] 6 内存的申请和释放

    [C++之旅] 6 内存的申请和释放 申请内存的方式 C语言方式 申请内存使用函数void *malloc(siz...

  • c++学习笔记——第二天

    1、c++中的内存管理 C语言提供了malloc和free两个函数(库函数)实现,完成对内存的释放和申请,而c++...

  • Java中的Unsafe

    Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和...

  • Java中的Unsafe

    Java和C++语言的一个重要区别就是Java中我们无法直接操作一块内存区域,不能像C++中那样可以自己申请内存和...

  • C++中New关键字和命名空间

    动态内存分配 C++中的动态内存分配C++中通过new关键字进行动态内存申请C++中的动态内存申请是基于类型进行的...

  • malloc和new的区别是什么?

    malloc与free是C++/C语言的标准库函数,new/delete是C++的运算符。它们都可用于申请动态内存...

  • C++中的新成员

    C++中的动态内存分配 C++中通过new关键字进行动态内存申请 C++中的动态内存申请是基于类型进行的 dele...

  • 5.动态内存分配

    内存申请 动态申请的内存可以跨函数使用 内存影像 练习

  • liunx中共享内存

    实现步骤 创建共享内存区 进程1申请一块共享区域,通过shmget函数生成 映射共享内存到进程1 通过shmat实...

网友评论

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

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