魔术师发牌问题------运行时提示“Windows 已在 魔术师发牌问题.exe 中触发一个断点“
题目:我的代码:(用的是只含尾指针的循环链表)#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。
输出窗口可能提供了更多诊断信息。
截图如下:
求解为毛??????
#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);把这个注释掉就不会堆报错了。。。 源代码在codeblocks 中运行没有任何错误,可以输出结果。去掉free()函数后,输出也是正确的。
输出结果可以看 附图。
建议运行小程序不要使用VS,不仅是大材小用,而且的确是会出现一些意想不到的的错误。
关于malloc 和free函数的原理 可以参看 csdn的这篇文章:http://blog.csdn.net/llhyy17/article/details/5375298 向往青莲 发表于 2014-4-12 11:33 static/image/common/back.gif
free(p1->next);把这个注释掉就不会堆报错了。。。
你把注释去掉,就知道我没有重复删除 kangkaisen 发表于 2014-4-12 18:02 static/image/common/back.gif
源代码在codeblocks 中运行没有任何错误,可以输出结果。去掉free()函数后,输出也是正确的。
输出结果可以 ...
这位兄台,如果VS连运行小程序都出错,大程序还能运行?你这样的想法我觉得是不对的 ←_← 话说我在VS2013下50多个错误的说 牡丹花下死做鬼 发表于 2014-4-13 01:11 static/image/common/back.gif
←_← 话说我在VS2013下50多个错误的说
2013我也用过,那个不好用,比如你用printf的话会很多warning,它让你用微软新加的函数 cuibaowenown2 发表于 2014-4-13 06:20 static/image/common/back.gif
2013我也用过,那个不好用,比如你用printf的话会很多warning,它让你用微软新加的函数
早晚得适应新函数啊 C11标准以及有了 总不能一直沉迷于VC++6.0吧 没人知道么?那我就当VS误报了 回帖是一种美德
谁能告诉我小甲鱼的数据第43讲为什么不能下载 黄志伟 发表于 2014-10-13 12:10
谁能告诉我小甲鱼的数据第43讲为什么不能下载
我也不知道啊 {:1_1:}不知道,帮顶吧
页:
[1]