【问题标题】:Error in double pointer deletion双指针删除错误
【发布时间】:2013-09-17 06:50:42
【问题描述】:

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

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

【问题讨论】:

  • 我想将字符串分配给 Dinfo.temp,最后分配给 newp*
  • 您永远不需要在(直接)回复您自己的问题或答案时添加评论。如果您有更多信息要提供,请使用编辑链接(在您的问题底部)将其添加到您的问题中。另外,请同时添加一个语言标签(我几乎可以肯定它是 C++,但这个网站适用于各种语言的程序员,所以标签有助于确保您的问题对合适的人可见)

标签: pointers


【解决方案1】:

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

请仔细阅读manual关于内存使用情况的信息。

【讨论】:

    猜你喜欢
    • 2021-12-29
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多