内存为什么申请失败?
#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;
} #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
谢谢大佬,是我粗心的,因该用多级指针,大佬C++该如何学呀,能不能分享一些经验。 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;
} 子函数结束就释放掉了 你在子函数下面输出看看 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;
}
是不是应该这样子? ba21 发表于 2020-2-25 19:42
2处打印的地址都不一样,肯定申请失败,这是明显的。
万分感谢 〃忝書γě渎ぐ 发表于 2020-2-25 19:32
谢谢大佬,是我粗心的,因该用多级指针,大佬C++该如何学呀,能不能分享一些经验。
先看这本书吧 《你必须知道的495个C语言问题》
对,没错
你的问题是如何学好C++,而我推荐的是这本C语言的书
因为C++和C语言有着剪不断的渊源
你学好了C++就意味着你一定学好C语言了,但是你学好C语言可不等于你就学好了C++
所以,先从C语言开始吧,你现在问的这些问题还属于C语言的问题
先把C语言学好,然后你就可以专心学习C++了
当然,如果能带上汇编语言去学习C++,效果会更好
人造人 发表于 2020-2-25 20:23
先看这本书吧 《你必须知道的495个C语言问题》
对,没错
受教了,哈哈
页:
[1]