使用双指针时遇到问题。我想将字符串分配给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;}
请帮帮我!!这个问题是由于指针删除?如何在我的特定情况下删除指针??
答案 0 :(得分:0)
有两个错误。首先,使用局部变量初始化指针。这是错误的,因为在test
完成后,Dinfo
的地址可能包含所有内容,因为对象被标记为不再使用。其次,你打电话给delete[]
。这是错误的,因为没有new
被调用(而不是使用局部变量)。即使您使用new
重写代码,也不要只调用delete[]
,只需delete
。
请仔细阅读有关内存使用情况的manual。