segmentation fault

cogbee 2012-11-01 10:33:59
#include<stdio.h>
#include<stdlib.h>

void f(char *buff,int len)
{
printf("%s\n",buff);
int i;
for(i=0;i<len;i++)
{ printf("%c\n",*buff);
*buff=*buff-1;
printf("%c\n",*buff);
buff++;
}
}
void main()
{
char *s=(char *)malloc(4);
s="123";
int l;
l=strlen(s);
//f(s,l);
int i;
for(i=0;i<l;i++)
{ printf("%c\n",*s);
*s=*s-1;
printf("%c\n",*s);
s++;
}

printf("%s\n",s);
free(s);
}
上面的函数,编译没有错误,为什么会出现段错误??
...全文
206 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
cogbee 2012-11-02
  • 打赏
  • 举报
回复
谢谢大家了。
AnYidan 2012-11-01
  • 打赏
  • 举报
回复
s="123";

修改 常量 属于未定义行为
mujiok2003 2012-11-01
  • 打赏
  • 举报
回复
都讲到了,不错。

[Quote=引用 2 楼 的回复:]
1.
char *s=(char *)malloc(4);
s="123";
分配内存后,有把指针知道别的地方,内存泄漏;
2, "123" 是常量, s 指到"123"去了,所以 *s=*s-1; 会出错!
3. s++ 把s改了,然后去free, 又会出错。。。

给了一个可行的:


C/C++ code

#include<stdio.h>
#include<s……
[/Quote]
bearJiang 2012-11-01
  • 打赏
  • 举报
回复
1.
char *s=(char *)malloc(4);
s="123";
分配内存后,有把指针知道别的地方,内存泄漏;
2, "123" 是常量, s 指到"123"去了,所以 *s=*s-1; 会出错!
3. s++ 把s改了,然后去free, 又会出错。。。

给了一个可行的:


#include<stdio.h>
#include<stdlib.h>

void f(char *buff,int len)
{
printf("%s\n",buff);
int i;
for(i=0;i<len;i++)
{ printf("%c\n",*buff);
*buff=*buff-1;
printf("%c\n",*buff);
buff++;
}
}
void main()
{
char *s=(char *)malloc(4);
char *p = s;
strcpy(s, "123");
int l;
l=strlen(s);
//f(s,l);
int i;
for(i=0;i<l;i++)
{ printf("%c\n",*s);
*s=*s-1;
printf("%c\n",*s);
s++;
}

printf("%s\n",s);
free(p);
}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧