【MFC】研究了很久,发现没写错啊,是关于链表的,高手来指正啊。
时间:2011-11-25
来源:互联网
问题描述:在初始化中没有问题,但是初始化完成后敲回车即程序定时器触发后直接跳掉了,招呼都不打一声耶
注:代码部分是规规矩矩的。可以跳掉额。
1、在头文件escapeDlg.h中的public:
int num_now; //当前障碍物数量
int num_sum; //障碍物总数量
struct BALL //定义障碍物的结构体相关属性,也可以用class
{
//省略部分代码
struct BALL *next; //指针指向下一个障碍物的结构体
}*ball, *firstball, *temp;
2、在escapeDlg.cpp中的OnInitDialog()写了
num_sum = 10;
///////////////////////////////////////////这是动态分配内存,可不看。
for (int i=0; i<num_sum; i++)
{
temp = (BALL*)malloc(sizeof(BALL)); //分配空间,目前ball在链表尾端并且是空地址无正常空间
if (i == 0)
{
firstball = temp; //链表的链首指向ball的内存地址
ball = temp;
}
temp->x = rand()%800 +2;
temp->y = 11;
temp->cx = rand()%(num_sum - 4) - 3;
temp->cy = rand()%(num_sum - 4) - 3;
ball->next = temp;
ball = ball->next;
}
ball = NULL;
ball = firstball;
for (i=0; i<num_sum; i++) //这是测试有没有分配好,结果正确。
{
CString a;
a.Format("%d", ball->cy);
AfxMessageBox(a);
ball = ball->next;
}
3、问题来了,注意啊
ball = firstball; //恢复ball指针位置
num_now = 0; //初始num_now
AfxMessageBox("1");
//////////////////////////////问题就是下面的while,谁能告诉我为什么?
while(ball != NULL) //这个while是用来读取ball的数量并存储到num_now
{
num_now++;
ball = ball->next;
}
下面附上程序源代码,是未加链表和加了链表的。http://d.1tpan.com/tp0556210166
帮个忙啊,纠结到要挂了。
注:代码部分是规规矩矩的。可以跳掉额。
1、在头文件escapeDlg.h中的public:
int num_now; //当前障碍物数量
int num_sum; //障碍物总数量
struct BALL //定义障碍物的结构体相关属性,也可以用class
{
//省略部分代码
struct BALL *next; //指针指向下一个障碍物的结构体
}*ball, *firstball, *temp;
2、在escapeDlg.cpp中的OnInitDialog()写了
num_sum = 10;
///////////////////////////////////////////这是动态分配内存,可不看。
for (int i=0; i<num_sum; i++)
{
temp = (BALL*)malloc(sizeof(BALL)); //分配空间,目前ball在链表尾端并且是空地址无正常空间
if (i == 0)
{
firstball = temp; //链表的链首指向ball的内存地址
ball = temp;
}
temp->x = rand()%800 +2;
temp->y = 11;
temp->cx = rand()%(num_sum - 4) - 3;
temp->cy = rand()%(num_sum - 4) - 3;
ball->next = temp;
ball = ball->next;
}
ball = NULL;
ball = firstball;
for (i=0; i<num_sum; i++) //这是测试有没有分配好,结果正确。
{
CString a;
a.Format("%d", ball->cy);
AfxMessageBox(a);
ball = ball->next;
}
3、问题来了,注意啊
ball = firstball; //恢复ball指针位置
num_now = 0; //初始num_now
AfxMessageBox("1");
//////////////////////////////问题就是下面的while,谁能告诉我为什么?
while(ball != NULL) //这个while是用来读取ball的数量并存储到num_now
{
num_now++;
ball = ball->next;
}
下面附上程序源代码,是未加链表和加了链表的。http://d.1tpan.com/tp0556210166
帮个忙啊,纠结到要挂了。
作者: wangyf112 发布时间: 2011-11-25
for (int i=0; i<num_sum; i++)
{
temp = (BALL*)malloc(sizeof(BALL)); //分配空间,目前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;
if (i == 0)
{
firstball = temp; //链表的链首指向ball的内存地址
ball = temp;
}
else
{
ball->next = temp;
ball = ball->next;
}
}
{
temp = (BALL*)malloc(sizeof(BALL)); //分配空间,目前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;
if (i == 0)
{
firstball = temp; //链表的链首指向ball的内存地址
ball = temp;
}
else
{
ball->next = temp;
ball = ball->next;
}
}
作者: fishion 发布时间: 2011-11-25
LINK : fatal error LNK1104: 无法打开文件“dxerr8.lib”
不能调试。
不过我认为:
ball = NULL;
ball = firstball;
这两句有问题,没有提供链表的终点。
for (i=0; i<num_sum; i++) //这是测试有没有分配好,结果正确。
这里loop次数有限制,正确。
但while循环就会有问题。
可能应该是
ball->next = NULL;//表示链表终点。
ball = firstball;//可能会破坏链表的,如果是测试,应该另外提供一个指针。
不能调试。
不过我认为:
ball = NULL;
ball = firstball;
这两句有问题,没有提供链表的终点。
for (i=0; i<num_sum; i++) //这是测试有没有分配好,结果正确。
这里loop次数有限制,正确。
但while循环就会有问题。
可能应该是
ball->next = NULL;//表示链表终点。
ball = firstball;//可能会破坏链表的,如果是测试,应该另外提供一个指针。
作者: hztj2005 发布时间: 2011-11-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28