〃忝書γě渎ぐ 发表于 2020-2-25 19:15:33

内存为什么申请失败?

#include <iostream>
using namespace std;

void GetMem(char* p,int num)
{
    p = new char;
    cout<<"p在内存中的地址:"<<&p<<endl;
}

int main()
{
    char* pChar = NULL;
    cout<<"pChar在内存中的地址:"<<&pChar<<endl;
    GetMem(pChar,10);
    if(pChar != NULL)
    {
      cout<<"内存申请成功!"<<endl;
      delete[] pChar;
    }
    else
    {
      cout<<"内存申请失败!"<<endl;
    }
    return 0;
}

人造人 发表于 2020-2-25 19:15:34

#include <iostream>
using namespace std;

void GetMem(char **p, int num)
{
    *p = new char;
    cout<<"p在内存中的地址:"<<&p<<endl;
}

int main()
{
    char* pChar = NULL;
    cout<<"pChar在内存中的地址:"<<&pChar<<endl;
    GetMem(&pChar, 10);
    if(pChar != NULL)
    {
      cout<<"内存申请成功!"<<endl;
      delete[] pChar;
    }
    else
    {
      cout<<"内存申请失败!"<<endl;
    }
    return 0;
}

〃忝書γě渎ぐ 发表于 2020-2-25 19:32:43

人造人 发表于 2020-2-25 19:15


谢谢大佬,是我粗心的,因该用多级指针,大佬C++该如何学呀,能不能分享一些经验。

ba21 发表于 2020-2-25 19:42:28

2处打印的地址都不一样,肯定申请失败,这是明显的。
#include <iostream>
using namespace std;

void GetMem(char** p,int num) // 形参应该用指向指针的指针才对吧
{
    *p = new char; // 申请内存,返回的是地址, 把这个地址赋值给指针p
    cout<<"p在内存中的地址:"<<p<<endl;
}

int main()
{
    char* pChar = NULL; // 空指针,指向的是NULL
    cout<<"pChar在内存中的地址:"<<&pChar<<endl; // 打印的是pChar在内存中的地址

    GetMem(&pChar,10);// 获取内存,意思就是用一个地址来填充这个NULL吧,要修改指针的值(也就是一个地址)实参应该传指针的地址,而形参应该用指向指针的指针才对吧,

    if(pChar != NULL)
    {
      cout<<"内存申请成功!"<<endl;
      delete[] pChar;
    }
    else
    {
      cout<<"内存申请失败!"<<endl;
    }
    return 0;
}

te___amo 发表于 2020-2-25 19:48:49

子函数结束就释放掉了 你在子函数下面输出看看

4goodworld 发表于 2020-2-25 19:50:42

void GetMem(char** p, int num)
{
        *p = new char;
        cout << "p在内存中的地址:" << p << endl;
}

int main()
{
        char* pChar = NULL;
        cout << "pChar在内存中的地址:" << &pChar << endl;
        GetMem(&pChar, 10);
        if (pChar != NULL)
        {
                cout << "内存申请成功!" << endl;
                delete[] pChar;
        }
        else
        {
                cout << "内存申请失败!" << endl;
        }
        return 0;
}
是不是应该这样子?

〃忝書γě渎ぐ 发表于 2020-2-25 19:52:16

ba21 发表于 2020-2-25 19:42
2处打印的地址都不一样,肯定申请失败,这是明显的。

万分感谢

人造人 发表于 2020-2-25 20:23:04

〃忝書γě渎ぐ 发表于 2020-2-25 19:32
谢谢大佬,是我粗心的,因该用多级指针,大佬C++该如何学呀,能不能分享一些经验。

先看这本书吧 《你必须知道的495个C语言问题》

对,没错
你的问题是如何学好C++,而我推荐的是这本C语言的书
因为C++和C语言有着剪不断的渊源
你学好了C++就意味着你一定学好C语言了,但是你学好C语言可不等于你就学好了C++
所以,先从C语言开始吧,你现在问的这些问题还属于C语言的问题
先把C语言学好,然后你就可以专心学习C++了
当然,如果能带上汇编语言去学习C++,效果会更好

4goodworld 发表于 2020-2-25 21:09:04

人造人 发表于 2020-2-25 20:23
先看这本书吧 《你必须知道的495个C语言问题》

对,没错


受教了,哈哈
页: [1]
查看完整版本: 内存为什么申请失败?