我要实现的目标如下:目标:经过一个函数处理后,生成一块数据。注意只有经过函数处理后才知道数据有多大。为简化问题,以字符集合表示。注意不是真的要返回字符串,不要高诉我用string或CString什么的。实现:在函数外定义一个指针的指针。并且把他传给函数,传出后取出数据。 char *pStr;
char ** ppStr=&pStr;
SetString(ppStr);
MessageBox(pStr);
// delete pStr;
void SetString(char **ppStr2)
{ // (*ppStr)="Hello,this is a test."; 
char * pTmp;
pTmp=new char(100);
memset(pTmp,0,100);
memcpy(pTmp,"Hello,this is a test2.",100);
(*ppStr2)=pTmp;
return ;
}MessageBox()可以显示,但是代码执行若干次后,出现异常。加上delete pStr;,则第一次执行就异常。
请高手指点。

解决方案 »

  1.   

    // delete pStr;
    void SetString(char **ppStr2)
    { // (*ppStr)="Hello,this is a test."; 
    char * pTmp;
    pTmp=new char[100];//--------修改
    memset(pTmp,0,100);
    memcpy(pTmp,"Hello,this is a test2.",100);
    (*ppStr2)=pTmp;
    return ;
    }void CTemDlg::OnOK() 
    {
    char *pStr;
    char ** ppStr=&pStr;
    SetString(ppStr);
    MessageBox(pStr);
    delete pStr;
    return;
      

  2.   

    多谢!能不能解释一下()和[]的不同?另外如果我不加delete pStr,应该造成内存泄漏,但是不应该很快出错啊?只有几百个字节,我内存300多M呢!一般执行3,4次就出异常了,为什么?
      

  3.   

    pTmp=new char(100);//NEW一个CHAR,初始值为(char)300
      

  4.   

    错了,pTmp=new char(100);//NEW一个CHAR,初始值为(char)100
      

  5.   

    这个程序也许这么写优雅一点void SetString(char *&pStr2)
    { pStr2=new char[100];//--------修改
    memset(pStr2,0,100);
    memcpy(pStr2,"Hello,this is a test2.",100);
    return ;
    }void CTemDlg::OnOK() 
    {
    char *pStr;
    SetString(pStr);
    MessageBox(pStr);
    delete pStr;
    return;
    }不过在函数外定义指针,在函数内初始化并分配内存,应该不是好方法。不过我没想出更好的办法。因为在调用函数之前不知道需要分配多少内存。