有个关于C语言的问题想问,出现了图片中的问题想问是什么原因?

主要是在大循环下比如for(m=1;m<maxmark;m++){buffer_1=(unsignedchar*)malloc(bmiHdr.biHeight*bmiHd... 主要是在大循环下比如for (m=1;m<maxmark;m++){ buffer_1=(unsigned char * )malloc(bmiHdr.biHeight*bmiHdr.biWidth);
buffer_2=(unsigned char * )malloc(object[centernum].length*object[centernum].height);
.......free(buffer_!);free(buffer_2);}作用是每一次buffer_2都开辟新空间储存buffer_1对应的点,这样写有什么问题么?为什么每次都出现图片上的问题?非常感谢~~
展开
 我来答
滴冰的水
2012-04-23 · TA获得超过1040个赞
知道小有建树答主
回答量:250
采纳率:0%
帮助的人:324万
展开全部
暂时看不出具体问题点。我怀疑是你分配的空间太大了,或者其他原因导致分配失败。
你调试一下,看看maxmark大概有多少,还有就是要确认
object[centernum].length*object[centernum].height 这样的使用,数组object没有越界。

有问题再问我
追问
如果越界了要怎样解决?
追答
目前不能确认你的是否有越界。
我给你举个关于越界的简单例子吧,比如
#define MAX_NUM 20
int a[MAX_NUM]; 这表示数组a只有20个元素,他们分别是a[0], a[1]....a[19]
0~19刚好是20个。那么在使用数组a的时候,就不能出现 a[20] 这样的使用,只要> 19就已经越界了
只有定义的时候才知道具体是多少个元素,使用者是不知道的;
如果真的出现了越界,就没法解决了。
所以,我们只能保证在使用的时候不要越界。比如可以增加适当的判断
if(x < MAX_NUM)
{
....
a[x] .....
}
else
{
//越界的处理
}
百度网友1cc1aca
2012-04-23 · 超过16用户采纳过TA的回答
知道答主
回答量:38
采纳率:0%
帮助的人:28.3万
展开全部
free(buffer_!);
改成
free(buffer_1)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
evfezfsf
2012-04-23
知道答主
回答量:51
采纳率:0%
帮助的人:15.9万
展开全部
不错,很合身!!同学很喜欢
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式