C++函数里申请的动态数组,如何释放

腊八节 腊八节 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <stdio.h>
#include <STACK>
#include <iostream>
using namespace std;

/*判断表达式是否合法*/
bool IsValid(char * str)
{
if(NULL==str)
return false;
stack<char> op;
while (*str)
{
if(*str=='(')
op.push(*str++);
else if (*str==')')
{
if(op.empty())
return false;
else
{
op.pop();
}
str++;
}
else
str++;
}
if(op.empty())
return true;
else
return false;
}
//消除中间括号
char *Elimination_brackets_1(char *str)
{
if(NULL==str)
return str;
char *temp=new char[strlen(str)+1];
char *result=temp;
*temp=*str;
//cout<<*temp<<endl;
temp++;
str++;
while (*str!='\0')
{
if (*str==')'||*str=='(')
{
str++;
continue;
}
(*temp++)=*str++;
}
*temp++=')';
*temp='\0';
cout<<result<<endl;
return result;
}
void main()
{
char str[]="(1,(2,3),(4,(5,6),7))";
if(IsValid(str))
{
//printf(Elimination_brackets_1(str));
char *p=Elimination_brackets_1(str);
cout<<str<<endl;
cout<<p<<endl;
delete []p;
cout<<p<<endl;

}

getchar();
}


请问,这个动态数组,我最后用指针指向它,释放时候用delete []p,还是用delete p;

两个运行的结果都是不能访问内存了,出了乱码,但是这个乱码的原因会不会是我只释放了第一个字符的内存,导致后面的内存不能有效访问呢?
...全文
评论 7
收藏 已收藏
分享
返回顶部
腊八节
C++ 语言 65,214 成员 250,514 内容