0

我在使用双指针时遇到问题。我想将字符串分配给 Dinfo.phrase。代码运行良好,直到语句 delete[] newp。执行此语句时,会出现以下错误。

Windows 已在 ...exe 中触发断点,这可能是由于堆损坏,这表明 teststring.exe 或其已加载的任何 DLL 中存在错误。

这是代码

struct dlgbox {
    char *temp;  };

void test(char **newp){
    dlgbox Dinfo;
    char *test="test";
    Dinfo.temp= NULL;
    Dinfo.temp=test;
    *newp = Dinfo.temp;
    printf("%s \n",*newp);}

int main(){
    char *newp=NULL;
    test(&newp);
    printf("main se ==%s ",newp);
    printf("\nstrlen %d ",strlen(newp));
    delete[] newp;
    _getch();
    return 0;}

请帮我!!这是由于指针删除造成的问题吗?在我的特殊情况下如何删除指针?

4

1 回答 1

0

有两个错误。首先,您使用局部变量来初始化指针。这是错误的,因为在test完成后Dinfos 地址可能包含所有内容,因为该对象被标记为未使用。第二,你打电话delete[]。这是错误的,因为 nonew被调用(而不是使用局部变量)。此外,即使您用 重写代码new,也不要调用delete[],只需delete.

请仔细阅读有关内存使用的手册。

于 2013-09-17T06:59:12.713 回答