C++函数里申请的动态数组,如何释放
腊八节 2014-09-07 11:48:30 #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;
两个运行的结果都是不能访问内存了,出了乱码,但是这个乱码的原因会不会是我只释放了第一个字符的内存,导致后面的内存不能有效访问呢?