大家看看,释放内存咋出错了?
#include<stdio.h>#include<string.h>
#include<malloc.h>
#include <iostream>
using namespace std;
typedef struct
{
char *base;
int len;
}HString;
void StrAssign(HString *T,char *ps)
{
int n=strlen(ps);
if(T->base) // 如果把释放的条件改为if(T->len == 0)就可以 了
{
free(T->base);
}
T->base=(char *)malloc(n*sizeof(char));
if(T->base==NULL)
{
puts("分配失败");
return;
}
strcpy(T->base,ps);
T->len=n;
}
void StrOutput(HString t)
{
if(t.len ==0 )
puts("空串");
else puts(t.base);
}
int main()
{
HString T;
T.base=NULL;
T.len=0;
char *ps="12345\n";
StrAssign(&T,ps);
StrOutput(T);
ps="abcde\n";
StrAssign(&T,ps);
StrOutput(T);
}
如果把释放的条件改为if(T->len == 0)就可以了,为啥啊?