鱼C论坛

 找回密码
 立即注册
查看: 2002|回复: 8

[已解决]内存为什么申请失败?

[复制链接]
发表于 2020-2-25 19:15:33 | 显示全部楼层 |阅读模式
20鱼币
  1. #include <iostream>
  2. using namespace std;

  3. void GetMem(char* p,int num)
  4. {
  5.     p = new char[num];
  6.     cout<<"p在内存中的地址:"<<&p<<endl;
  7. }

  8. int main()
  9. {
  10.     char* pChar = NULL;
  11.     cout<<"pChar在内存中的地址:"<<&pChar<<endl;
  12.     GetMem(pChar,10);
  13.     if(pChar != NULL)
  14.     {
  15.         cout<<"内存申请成功!"<<endl;
  16.         delete[] pChar;
  17.     }
  18.     else
  19.     {
  20.         cout<<"内存申请失败!"<<endl;
  21.     }
  22.     return 0;
  23. }
复制代码
最佳答案
2020-2-25 19:15:34
  1. #include <iostream>
  2. using namespace std;

  3. void GetMem(char **p, int num)
  4. {
  5.     *p = new char[num];
  6.     cout<<"p在内存中的地址:"<<&p<<endl;
  7. }

  8. int main()
  9. {
  10.     char* pChar = NULL;
  11.     cout<<"pChar在内存中的地址:"<<&pChar<<endl;
  12.     GetMem(&pChar, 10);
  13.     if(pChar != NULL)
  14.     {
  15.         cout<<"内存申请成功!"<<endl;
  16.         delete[] pChar;
  17.     }
  18.     else
  19.     {
  20.         cout<<"内存申请失败!"<<endl;
  21.     }
  22.     return 0;
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 19:15:34 | 显示全部楼层    本楼为最佳答案   
  1. #include <iostream>
  2. using namespace std;

  3. void GetMem(char **p, int num)
  4. {
  5.     *p = new char[num];
  6.     cout<<"p在内存中的地址:"<<&p<<endl;
  7. }

  8. int main()
  9. {
  10.     char* pChar = NULL;
  11.     cout<<"pChar在内存中的地址:"<<&pChar<<endl;
  12.     GetMem(&pChar, 10);
  13.     if(pChar != NULL)
  14.     {
  15.         cout<<"内存申请成功!"<<endl;
  16.         delete[] pChar;
  17.     }
  18.     else
  19.     {
  20.         cout<<"内存申请失败!"<<endl;
  21.     }
  22.     return 0;
  23. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-25 19:32:43 | 显示全部楼层

谢谢大佬,是我粗心的,因该用多级指针,大佬C++该如何学呀,能不能分享一些经验。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 19:42:28 | 显示全部楼层
2处打印的地址都不一样,肯定申请失败,这是明显的。
  1. #include <iostream>
  2. using namespace std;

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

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

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

  13.     if(pChar != NULL)
  14.     {
  15.         cout<<"内存申请成功!"<<endl;
  16.         delete[] pChar;
  17.     }
  18.     else
  19.     {
  20.         cout<<"内存申请失败!"<<endl;
  21.     }
  22.     return 0;
  23. }
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
〃忝書γě渎ぐ + 1 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 19:48:49 | 显示全部楼层
子函数结束就释放掉了 你在子函数下面输出看看  
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 19:50:42 | 显示全部楼层
  1. void GetMem(char** p, int num)
  2. {
  3.         *p = new char[num];
  4.         cout << "p在内存中的地址:" << p << endl;
  5. }

  6. int main()
  7. {
  8.         char* pChar = NULL;
  9.         cout << "pChar在内存中的地址:" << &pChar << endl;
  10.         GetMem(&pChar, 10);
  11.         if (pChar != NULL)
  12.         {
  13.                 cout << "内存申请成功!" << endl;
  14.                 delete[] pChar;
  15.         }
  16.         else
  17.         {
  18.                 cout << "内存申请失败!" << endl;
  19.         }
  20.         return 0;
  21. }
复制代码

是不是应该这样子?

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
〃忝書γě渎ぐ + 1 + 1 鱼C有你更精彩^_^

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-2-25 19:52:16 | 显示全部楼层
ba21 发表于 2020-2-25 19:42
2处打印的地址都不一样,肯定申请失败,这是明显的。

万分感谢
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 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++,效果会更好

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
〃忝書γě渎ぐ + 1 + 1 谢谢大佬,感激!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-25 21:09:04 | 显示全部楼层
人造人 发表于 2020-2-25 20:23
先看这本书吧 《你必须知道的495个C语言问题》

对,没错

受教了,哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-7 16:33

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表