社区
C语言
帖子详情
會不會報錯?
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
打赏
收藏
會不會報錯?
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]); } } 这个函数调用会报错吗?大家猜一下,看看有漏洞。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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]存的值对应的堆上的上那款内存操作,结果应该是未知的~~~~~
死循环 : 死循环是否会报错?为什么?
死循环 : 死循环是否会报错?为什么? 该死循环不会导致内存空间不够用 没有产生什么内存空间 只是CPU一直在忙,不停的忙 什么也做不了,但是一直不停的瞎转,内存空间不会浪费,只会造成卡顿 循环中调用了A()函数,产生了A的上下文,并入栈(执行栈)A()函数就结束了(因为A函数什么也没做),结束后,A的上下文就出栈出栈后,本次循环结束进行下一次循环下一次循环重复调用A函数...
变量在声明前调用,为什么var 不会报错,let 会报错?什么是变量提升?
1、变量在声明前调用,为什么var 不会报错,let 会报错? var 定义变量的时候,js是首先直接把变量声明到作用域的最顶部的,所以这个时候,全局都能找到这个变量 所以在定义之前调用这个变量,是不会报错的。所以为了纠正这个问题,在ES 提出了let 这个解决方案。 let 是必须先声明,然后才可以引用的,否则程序会中断,不会继续往下进行。 // var 的情况 console.log...
为什么10.toFixed(10)会报错?
当然出现这个报错是因为前面这个数是整数,如果本来就是小数就不会出现这个报错。因为这个点紧跟于一个数字之后,按照规范,解释器就把它判断为一个小数点。它既可以理解为小数点,也可以理解为对方法的调用。之所以会报错,是因为在。的解释发生了歧义导致。
怎么让客户端关闭后服务器不会报错?
标题:怎么让客户端关闭后服务器不会报错? 解释:当你客户端(clientSocket)连接上服务器(serverSocket)之后,服务器会创建一个clientSocket,这个clientSocket和你自己的客户端进行交互,当你关闭客户端时,在服务器中的clientSocket还在一直就收客户端发送的消息,所以会报错,因此我们在就收消息这里写一个try{} catch{}语句就可以了: ...
java 两个byte相加_为什么两个byte类型的变量相加会报错?
1.先看以下代码public classMain {public static void main(String[] args) {byte a =4;byte b =6;byte c = a + b;}}以上代码在编译过程中就会报错。2.分析:为什么byte a = 4;就不会报错?因为byte是一个字节,八个二进制位,此时其范围为-128 ~ +127,所以4在其范围内,所以可以被赋值。一旦这...
C语言
69,371
社区成员
243,082
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章