麻烦看下,这个程序哪有问题?内存错在哪了?谢谢

dataowner 2008-02-27 06:19:45
//将字符串中连续的字母归并为一个,例如aaabbcdd -> abcd
void Fun(const char *a)
{
if(a == NULL)
return;
int len = sizeof(a);
char *p = new char[len];
if(p == NULL)
return;
memset(p,0,len);

while((*a) != '\0')
{
int i = 0;
while(*(p+i) != 0)
{
if(*(p+i) == *a)
break;
i++;
}
if(i==strlen(p))
*(p + i) = *a;
a++;
}
cout <<p;
delete []p;
p = NULL;
}
...全文
94 5 打赏 收藏 举报
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dataowner 2008-02-27
  • 打赏
  • 举报
回复
hehe,就是int len = sizeof(a);传入指针永远是4...
谢谢大家。
hityct1 2008-02-27
  • 打赏
  • 举报
回复
int len = sizeof(a);
显然不对
应为:
int len = strlen(a);
lin_style 2008-02-27
  • 打赏
  • 举报
回复
		if(*(p+i)   ==   *a)
break;
i++;


我猜你的意思是如果一样, 就把i相加,然后跳出,对a进行处理吧
写反了

		if(*(p+i)   ==   *a)
{
i++;

break;
}
baihacker 2008-02-27
  • 打赏
  • 举报
回复

//勉强能用
void Fun(const char *a)
{
if(!a) return;

int i = 0;
int len = strlen(a);
char *p = new char[len+1];


while (*a)
{
while (a[1]==a[0]) a++;
p[i++] = *a++;
}
p[i] = 0;

cout << p << endl;

delete []p;
p = NULL;
}
baihacker 2008-02-27
  • 打赏
  • 举报
回复
int len = sizeof(a);
char *p = new char[len];

int len = strlen(a);
char *p = new char[len+1];
发帖
C++ 语言

6.3w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2008-02-27 06:19
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下