双指针删除错误

时间:2013-09-17 06:50:43

标签: pointers

使用双指针时遇到问题。我想将字符串分配给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;}

请帮帮我!!这个问题是由于指针删除?如何在我的特定情况下删除指针??

1 个答案:

答案 0 :(得分:0)

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

请仔细阅读有关内存使用情况的manual