會不會報錯?

tgl10 2008-05-22 01:12:30
char *xp[2]; //全局变量
void v(){
for(int i=0;i<2;i++){
free(xp[i]); //主要看这里有没问题
xp[i]=(char*)malloc((rand()+100)%6+4); //随机分配一些空间
strcpy(xp[i],"VVn");
printf("%s ",xp[i]);
}
}

这个函数调用会报错吗?大家猜一下,看看有漏洞。
...全文
89 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
cyr12 2008-05-22
  • 打赏
  • 举报
回复
楼主申请的是指针数组,即由指针构成的数组
lionc650 2008-05-22
  • 打赏
  • 举报
回复
这个是指针,不是数组吧.....而指针又是常量,所以和你说的情况不一样
shaohuaijian 2008-05-22
  • 打赏
  • 举报
回复
会错……
系统给数组分配存储空间是个连续的,跟数组定义的大小有关
例如:int array[10],一个整型数据占2字节的存储空间,所以
系统会给int array[10]分配20个字节的空间。也就是说对于数
组来说空间的以整体考虑的……
tgl10 2008-05-22
  • 打赏
  • 举报
回复
cuibo1123
---------
我分配了马上就释放就没意义了
tgl10 2008-05-22
  • 打赏
  • 举报
回复
這個函数连续执行若干次,所以要在分配之前进行free之前分配的空间
有时会报错,加了if(!xp[i])free(xp[i]);就不会了,但不晓得原因..
cyr12 2008-05-22
  • 打赏
  • 举报
回复
我用dev c++ 编译运行 一切正常,
但跟踪调试时,监视xp[i]的值时调试器一直报错(不监视就没事)
原因是free(xp[i]);释放掉了xp[i]的指针(我的是0x443010 表示0x443010指针已不再使用,归还系统)
但实际上xp[i]指针还存在,只不过没有被其他的变量占用.所以
strcpy(xp[i],"VVn");
printf("%s ",xp[i]);

程序会原样输出"vvn"
bo.cui 2008-05-22
  • 打赏
  • 举报
回复
char *xp[2]; //全局变量

void v(){
for(int i=0;i <2;i++){
free(xp[i]); //第一次什么都没有,不用释放
xp[i]=(char*)malloc((rand()+100)%6+4); //随机分配一些空间
strcpy(xp[i],"VVn");
printf("%s ",xp[i]);
}
}

这样写:

char *xp[2]; //全局变量

void v(){
for(int i=0;i <2;i++){
xp[i]=(char*)malloc((rand()+100)%6+4); //分配长度为(rand()+100)%6+4的空间
strcpy(xp[i],"VVn");//拷贝Wn到xp[i]
printf("%s ",xp[i]);//输出
free(xp[i]);//释放
}
}
lin_style 2008-05-22
  • 打赏
  • 举报
回复
en .kan i lou
Clerk_9919 2008-05-22
  • 打赏
  • 举报
回复
会错的,你可以先给xp[i]=0
机智的呆呆 2008-05-22
  • 打赏
  • 举报
回复
因为xp[i]没通过malloc正常的赋值~~~~~~~看系统给xp[i]默认值了
机智的呆呆 2008-05-22
  • 打赏
  • 举报
回复
free(xp[i]),是对x[i]存的值对应的堆上的上那款内存操作,结果应该是未知的~~~~~

69,371

社区成员

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

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