鱼C论坛

 找回密码
 立即注册
查看: 4615|回复: 12

魔术师发牌问题------运行时提示“Windows 已在 魔术师发牌问题.exe 中触发一个断点“

[复制链接]
发表于 2014-4-12 00:45:43 | 显示全部楼层 |阅读模式
20鱼币
题目: 1.png
我的代码:(用的是只含尾指针的循环链表)
#include <stdio.h>
#include <stdlib.h>

#define N 13

struct LinkList
{
        int n;
        LinkList *next;
}*rear;

void CreateChain()
{
        LinkList *p=rear=(LinkList*)malloc(sizeof(LinkList));
        for (int i=1;i<=N;i++)
        {
                p->next=(LinkList*)malloc(sizeof(LinkList));
                p=p->next;
                p->n=i;
        }
        p->next=rear->next;
        rear->next=p;
}

int main()
{
        CreateChain();
        LinkList *p1=rear->next,                
                 *p2;                        //删除指针时用
        int n;
        for (int i=1;i<=N;i++)
        {
                n=i;
                while (--n)                // 指针走到该到的位置
                        p1=p1->next;
                printf("黑桃%d放在第%d张\n",i,p1->next->n);
                p2=p1->next->next;
                //printf("删除了%d\n",p1->next->n);//测试是否正确删除结点
                free(p1->next);
                p1->next=NULL;
                p1->next=p2;
        }
        free(rear);
        system("pause");
        return 0;
}
编译器:VS2010
运行时错误为:
Windows 已在 魔术师发牌问题.exe 中触发一个断点。

其原因可能是堆被损坏,这说明 魔术师发牌问题.exe 中或它所加载的任何 DLL 中有 Bug。

原因也可能是用户在 魔术师发牌问题.exe 具有焦点时按下了 F12。

输出窗口可能提供了更多诊断信息。

截图如下:
2.png
求解为毛??????

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-12 11:33:19 | 显示全部楼层
#include <stdio.h>
#include <stdlib.h>

#define N 13

struct LinkList
{
        int n;
        LinkList *next;
}*rear;

void CreateChain()
{
        LinkList *p=rear=(LinkList*)malloc(sizeof(LinkList));
        for (int i=1;i<=N;i++)
        {
                p->next=(LinkList*)malloc(sizeof(LinkList));
                p=p->next;
                p->n=i;
        }
        p->next=rear->next;
        rear->next=p;
}

int main()
{
        CreateChain();
        LinkList *p1=rear->next,                
                *p2;                        //删除指针时用
        int n;
        for (int i=1;i<=N;i++)
        {
                n=i;
                while (--n)                // 指针走到该到的位置
                        p1=p1->next;
                printf("黑桃%d放在第%d张\n",i,p1->next->n);
                p2=p1->next->next;
                //printf("删除了%d\n",p1->next->n);//测试是否正确删除结点
                /*free(p1->next);        */
//这里必须要注释掉。。因为你下面又用了free(rear)
//如果不注释掉的话。。就会重复free了。。那么堆肯定要出错了
                p1->next=NULL;
                p1->next=p2;
        }
        free(rear);
        system("pause");
        return 0;
}
free(p1->next);把这个注释掉就不会堆报错了。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-12 18:02:22 | 显示全部楼层
源代码在codeblocks 中运行没有任何错误,可以输出结果。去掉free()函数后,输出也是正确的。
输出结果可以看 附图。

建议运行小程序不要使用VS,不仅是大材小用,而且的确是会出现一些意想不到的的错误。

关于malloc 和free函数的原理 可以参看 csdn的这篇文章:http://blog.csdn.net/llhyy17/article/details/5375298
QQ图片20140412174903.jpg
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-12 23:00:34 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-12 23:01:13 | 显示全部楼层
kangkaisen 发表于 2014-4-12 18:02
源代码在codeblocks 中运行没有任何错误,可以输出结果。去掉free()函数后,输出也是正确的。
输出结果可以 ...

这位兄台,如果VS连运行小程序都出错,大程序还能运行?你这样的想法我觉得是不对的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-13 01:11:56 | 显示全部楼层
←_← 话说我在VS2013下50多个错误的说
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-13 06:20:56 | 显示全部楼层
牡丹花下死做鬼 发表于 2014-4-13 01:11
←_← 话说我在VS2013下50多个错误的说

2013我也用过,那个不好用,比如你用printf的话会很多warning,它让你用微软新加的函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-4-13 06:50:01 | 显示全部楼层
cuibaowenown2 发表于 2014-4-13 06:20
2013我也用过,那个不好用,比如你用printf的话会很多warning,它让你用微软新加的函数

早晚得适应新函数啊 C11标准以及有了 总不能一直沉迷于VC++6.0吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-4-13 17:51:39 | 显示全部楼层
没人知道么?那我就当VS误报了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-15 12:24:12 | 显示全部楼层
回帖是一种美德
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-13 12:10:32 | 显示全部楼层

谁能告诉我小甲鱼的数据第43讲为什么不能下载
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-10-14 21:53:55 | 显示全部楼层
黄志伟 发表于 2014-10-13 12:10
谁能告诉我小甲鱼的数据第43讲为什么不能下载

我也不知道啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-15 07:32:36 | 显示全部楼层
{:1_1:}不知道,帮顶吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-22 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表