谁能告诉我这题要说明的问题啊?帮我解释一下

来源:百度知道 编辑:UC知道 时间:2024/06/01 22:56:36
void GetMem(char* pData)
{
pData = new char[100];
}

char* pDDD = NULL;
GetMem(pDDD);
strcpy(pDDD,"hello");
运行结果是什么 ?

传入的是值参,
在函数里的修改没有用。
所以pDDD在函数运行完之后还是 NULL

strcpy 这一句会出错。Runtime error.
而函数里new 的那块内存无法释放,会造成内存泄露。

void GetMem(char** ppData)
{
*ppData = new char[100];
}

char* pDDD = NULL;
GetMem(&pDDD);
strcpy(pDDD,"hello");
...
delete []pDDD;
这样还差不多。

这道题是函数与指针的运用
首先,他先定义个指针,这个珍珠鸟先让他指向空,当然他也没有被分配内存,无法存放字符或者字符串;
其次,他调用一个函数,这个函数的作用是为传进去的指针开辟一个内存空间,以用来存放字符串,这个函数结束后,由于没有调用析构函数,所以开辟的内存在函数外依然存在;
下来,调用strcpy字符串拷贝函数,将字符串常量,"hello"复制给PDDD,这里,可以吧PDDD看做一个字符串数组,是可以存放字符或者字符串的。
最后提醒下,用malloc或者new开辟的空间在不用的时候要调用delete释放内存,防止内存泄露,在C++中可以在析构函数内写 ;
例:delete [] PDDD;

当然是字符串hello

就相当于建立了一个100个char的空间,把hello字符串复制进去,当然,包括\0

结果就是hello.... 原理上面说得1000 1001不离1100.