【问题贴】关于一个小游戏中问题,没发现问题所在,可就是会出错。
时间:2011-12-01
来源:互联网
附上源码地址:http://d.1tpan.com/tp1301999514
作者: wangyf112 发布时间: 2011-12-01
作者: g6785654 发布时间: 2011-12-01
而不进行释放,应该加上释放内存动作
如:
对话框初始化时
C/C++ code
ball = firstball=temp = NULL; if (nIDEvent == 1) //等级时间间隔计时器 { //先是方内存 temp = ball = firstball; //恢复ball指针位置 for ( ;ball != NULL;ball=ball->next) { free(ball); }
另外还可以分配一次内存,重复利用,这样效率更好
作者: gameslq 发布时间: 2011-12-01
调试时,看不到调用堆栈吗?
作者: ouyh12345 发布时间: 2011-12-01
出错是内存不能为读,不知道什么意思,应该是吧。
RE:gameslq
用了你的方法,但是在timer(1)第二次就出问题了,if(nIDEvent == 1)中把所有ball free了,但是执行时后面的赋值好像出错了。。。我debug发现if(nIDEvent == 2)中的ball是NULL。
问一下,当开启两个timer会不会在timer1执行到一半时另一个timer2开始执行?
RE:ouyh12345
"可能是缓冲区溢出
调试时,看不到调用堆栈吗?"这句话怎么说?看不懂啊,菜鸟。。。
作者: wangyf112 发布时间: 2011-12-01
我又试了那个重复利用的,我是每次执行timer1时多加一个ball,那么我就先把所有已存在的ball重新赋值,即C/C++ code
ball = firstball; while (ball != NULL) { //here赋值 ball = ball->next; } //再新创建一个ball temp = (BALL*)malloc(sizeof(BALL)); memset(temp, 0, sizeof(BALL)); temp->x = rand()%800 +2; temp->y = 11; temp->cx = rand()%(num_sum - 4) - 3; temp->cy = rand()%(num_sum - 4) - 3; ball = temp;
我用了这个方法,代码对不?我执行发现还是有问题啊,在第一次就出错。
作者: wangyf112 发布时间: 2011-12-01
RE:g6785654
出错是内存不能为读,不知道什么意思,应该是吧。
RE:gameslq
用了你的方法,但是在timer(1)第二次就出问题了,if(nIDEvent == 1)中把所有ball free了,但是执行时后面的赋值好像出错了。。。我debug发现if(nIDEvent == 2)中的ball是NULL。
问一下,当开启两个timer会不会在timer1执行到……
Debug下call stack,看函数调用堆栈~
作者: VisualEleven 发布时间: 2011-12-01
用的是计时器,那个F10不能单步跟踪,call stack后直接是出错的地方了,看不到什么东西,只是ball不存在。。。
作者: wangyf112 发布时间: 2011-12-01
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28