c/c++ 指针的问题 如何更改

来源:百度知道 编辑:UC知道 时间:2024/06/18 00:38:08
以下程序,请分别对两种情况的错误分释一下
#include<iostream>
#include<string>
using namespace std;

typedef struct MDF
{
string name;
MDF *next;
} pr,*pt;

//情况一 目的象指向指针的指针,并赋值输出
void main()
{
pt *ppr;
ppr = new pt;
*ppr = NULL;

*ppr = new (pr);
*ppr->name = "hakd";
*ppr->next = NULL;
cout<<*ppr->name<<endl;
}

//情况二 目的实现象哈希表一样,这里只是对其中一个井赋值
void main()
{
pt *ppr;
ppr = new pt[3];
for(int i=0; i<3; i++)
{
ppr[i] = NULL;
}
ppr[1] = new (pr);
ppr[1]->name = "hakd";
ppr[1]->next = NULL;
cout<<ppr[1]->name<<endl;
}

#include<iostream>
#include<string>
using namespace std;

typedef struct MDF
{
string name;
MDF *next;
} pr,*pt;

//情况一 目的象指向指针的指针,并赋值输出
int main()
{
pt *ppr;
ppr = new pt;
//*ppr = NULL; //修改原因:因为后面*ppr马上赋值,所以此处赋值多余

*ppr = new (pr);
(*ppr)->name = "hakd";//修改原因:->优先级高于*
(*ppr)->next = NULL;//修改原因:同上
cout<<(*ppr)->name<<endl;//修改原因:同上

//添加原因:上述内存采用堆分配,需要显示释放,以避免内存泄露
delete *ppr;
delete ppr;

system("PAUSE");
return 0;
}

//情况二 目的实现象哈希表一样,这里只是对其中一个井赋值
int main()
{
pt *ppr;
ppr = new pt[3];
for(int i=0; i<3; i++)
{
ppr[i] = NULL;
}
ppr[1] = new (pr);
ppr[1]->name = "hakd";
ppr[1]->next = NULL;
cout<<ppr[1]->name<<endl;

//添加原因:上述内存采用堆分配,需要显示释放,以避免内存泄露
for(int i=0; i&l