| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6223 人关注过本帖
标题:VS 编程 0x00F51693 处有未经处理的异常(在 单链表v.exe 中): 0xC0000005: ...
只看楼主 加入收藏
小YIT鸟
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-3-22
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:11 
VS 编程 0x00F51693 处有未经处理的异常(在 单链表v.exe 中): 0xC0000005: 读取位置 0xCDCDCDD1 时发生访问冲突。
图片附件: 游客没有浏览图片的权限,请 登录注册

0x00F51693 处有未经处理的异常(在 单链表v.exe 中):  0xC0000005:  读取位置 0xCDCDCDD1 时发生访问冲突。
求助到底什么是原因?
2016-03-22 22:34
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
指針

授人以渔,不授人以鱼。
2016-03-22 22:39
小YIT鸟
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-3-22
收藏
得分:0 
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//链表结构体
typedef struct Node{
    int data;
    struct Node * pNext;
}NODE ,*PNODE; 
//c创建与销毁
PNODE create_list(void);
void destroy(PNODE H);
//主函数
int main()
{
    PNODE P;
    P=create_list();
    destroy(P);
    return 0;
}
PNODE create_list(void)//创建链表
{
    
    int len;int i;
    int val;
    
    PNODE pHead=(PNODE)malloc(sizeof(NODE));//分配头节点
    if(NULL==pHead)
    {printf("分配失败,程序终止\n");return(NULL);
    }
    PNODE pTail=(PNODE)malloc(sizeof(NODE));//分配头节点
    if(NULL==pTail)
    {
    printf("分配失败,程序终止\n");
    return (NULL);
    }

    PNODE Tail=pHead;
    pTail->pNext=NULL;

        printf("请您输入生成的链表节点个数:");
        scanf("%d",&len);

    for(i=0;i<len;i++)//按序输入节点及内容
    {
        printf("请输入第%d个节点的值:",i+1);
        scanf("%d",&val);

        PNODE pNEW=(PNODE)malloc(sizeof(NODE));
            if(pNEW==NULL)
            {
        printf("分配失败,程序终止");
        return(NULL);}

    pNEW->data =val;
    pTail->pNext=pNEW;
    pNEW->pNext=NULL;
    pTail=pNEW;
}
    return pHead;
}

//销毁
void destroy(PNODE H)
{
    PNODE p,q;
    p=H;
    while(p){
        q=p;
        p=p->pNext;
        free(q);
        printf("已销毁");
}
}
2016-03-22 22:41
小YIT鸟
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-3-22
收藏
得分:0 
我在VC6.0上运行会崩溃,
vS 2013 上就如上
怎么了?
2016-03-22 22:42
luckhide
Rank: 5Rank: 5
来 自:青岛
等 级:职业侠客
帖 子:51
专家分:338
注 册:2016-3-19
收藏
得分:0 
找到崩溃位置再说。学会自己调试,自己写的代码通常估摸的到崩溃位置,不是自己写的可通过F10、F11键交替使用找到崩溃位置(vs、vc单步略有不同)
2016-03-22 22:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
回复 5楼 luckhide
hehe,這種話很多人是聽不進去的,他們祗是急於完成這個題目,而不是通過做題學會技能。古人說“格物致知”,格物是致知的途徑和手段,不是目的,但現在的人,就是爲格物而格物,對知是不在乎的。

[此贴子已经被作者于2016-3-22 23:59编辑过]


授人以渔,不授人以鱼。
2016-03-22 23:25
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:20 
有2个问题:
1. 申请了太多不必要的内存;
2. 释放链表要从最底层释放起,从头释放是有问题的。


#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>

//链表结构体
typedef struct Node {
    int data;
    struct Node * pNext;
}NODE, *PNODE;
//c创建与销毁
PNODE create_list(void);
void destroy(PNODE H);
//主函数
int main()
{
    PNODE P = NULL;
    P = create_list();
    if (P == NULL)//判断下返回值
    {
        return 0;
    }
    destroy(P);
    return 0;
}
PNODE create_list(void)//创建链表
{

    int len; int i;
    int val;
    PNODE pTail = NULL;

    //PNODE pHead = (PNODE)malloc(sizeof(NODE));//分配头节点
    //if (NULL == pHead)
    //{
    //    printf("分配失败,程序终止\n"); return(NULL);
    //}
    //PNODE pTail = (PNODE)malloc(sizeof(NODE));//分配头节点
    //if (NULL == pTail)
    //{
    //    printf("分配失败,程序终止\n");
    //    return (NULL);
    //}

    PNODE Tail = NULL;
    //pTail->pNext = NULL;

    printf("请您输入生成的链表节点个数:");
    scanf("%d", &len);

    for (i = 0; i<len; i++)//按序输入节点及内容
    {
        printf("请输入第%d个节点的值:", i + 1);
        scanf("%d", &val);

        PNODE pNEW = (PNODE)malloc(sizeof(NODE));
        if (pNEW == NULL)
        {
            printf("分配失败,程序终止");
            return(NULL);
        }
        
        pNEW->data = val;
        pNEW->pNext = NULL;
        if (pTail == NULL)
        {
            pTail = pNEW;
            Tail = pTail;
            continue;
        }
        pTail->pNext = pNEW;
        pTail = pNEW;
    }
    return Tail;
}

//销毁
void destroy(PNODE H)
{
    PNODE p, q;
    while (H->pNext != NULL)
    {
        p = H;
        q = H;
        while (p->pNext != NULL) {
            q = p;
            p = p->pNext;
        }
        free(p);
        q->pNext = NULL;
    }
    free(H);
    printf("已销毁");
}

[此贴子已经被作者于2016-3-23 10:19编辑过]

2016-03-23 10:07
小YIT鸟
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-3-22
收藏
得分:0 
多谢解答,
不过关于内存释放我还有些糊涂;
这是我从新改的
题目是求A交B,存放到C中,最后销毁A,B都可以,但是销毁C就会报错
???
程序代码:
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>


 //链表结构体
 typedef struct Node {
     int data;
     struct Node * pNext;

 }NODE, *PNODE;

 

 PNODE create_list(void); //创建
 void destroy(PNODE H);//销毁
 void Out_Pnode(PNODE p);//输出

PNODE AB (PNODE A,PNODE B);//求A交B
PNODE Locate(PNODE B,int x);//遍历

 //主函数
 int main()

 {
     PNODE A ;//创建A集合
     PNODE B ;
     PNODE C ;//C=A&&B

     printf("输入A集合的数值\n");
     A = create_list();
     if (A == NULL)//判断下返回值
     { return 0;} 
     printf("输出A集合的数值\n");
     Out_Pnode(A);//输出A集合
       
     printf("\n");
     printf("\n");

    
     printf("输入B集合的数值\n");
     B = create_list();
     if (B == NULL)
     { return 0;}
     printf("输出B集合的数值\n");
     Out_Pnode(B);

     printf("\n");
     printf("\n");

     C = AB ( A, B);
     printf("输出C集合的数值\n");
     Out_Pnode(C);
     
     printf("\n");
     printf("\n");
     
     printf("销毁A\n");
     destroy(A);
     printf("销毁B\n");
     destroy(B);
     printf("销毁C\n");
     destroy(C);//??????会出问题
     return 0;

 }

 PNODE create_list(void)//创建链表
 {

     int len; int i;
     int val;
     PNODE pTail ;
     pTail = (PNODE)malloc(sizeof(NODE));
     PNODE k=pTail;
     pTail->pNext=NULL;

     printf("请您输入生成的链表节点个数:");
     scanf("%d", &len);

     for (i = 0; i<len; i++)//按序输入节点及内容
     {
         printf("请输入第%d个节点的值:", i + 1);
         scanf("%d", &val);

         PNODE pNEW = (PNODE)malloc(sizeof(NODE));
         if (pNEW == NULL)
         {
             printf("分配失败,程序终止");
             return(NULL);
         }
         
         pNEW->data = val;
         pNEW->pNext = NULL;
         k->pNext = pNEW;
         k = pNEW;
     }
     return pTail;

 }


 //销毁
 void destroy(PNODE H)

 {
     PNODE p, q;
     p=H;
     while(p)
     {
     q=p;
     p=p->pNext;
     free(q);
     }
     H=NULL;
     printf("已销毁\n");

 }

 //求A交B
 PNODE AB (PNODE A,PNODE B){
     int x;
     PNODE pre,p;
     pre=A;p=pre->pNext;
     while(p){
         x=p->data;
         if(!Locate(B,x))
         {
             pre->pNext=p->pNext;
             free(p);
             p=pre->pNext;
         }
         else 
         {
             pre=p;
             p=p->pNext;
         
         }
     }
     return A;

 }
PNODE Locate(PNODE B,int x)
{
     PNODE p=B->pNext;
     while (p&&p->data!=x)
         p=p->pNext;
     return (p);
}


 void Out_Pnode(PNODE p)//输出链表
 {
     PNODE q;
     q=p->pNext;
    if(!p)
     printf("表不存在\n");
    while(q)

 {
        printf("%d ",q->data );
        q=q->pNext;

 }

 }

运行时最后一个销毁内存的会报错,
我想知道这是为什么?
2016-03-25 09:23
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
A交B是什么?因为C只有头next是空的,你销毁时没判断直接free next空指针,就会报错了。
2016-03-25 09:51
小YIT鸟
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2016-3-22
收藏
得分:0 
原题:
已知递增有序的两个单链表A,B分别存储了一个集合。设计算法实现求两个集合的交集的运算A∩B。
按你的意思,我创的C只是个指针,不能像A,B那样销毁吗?(A,B不同样是指针吗?难道是因为指向了相应的链表?)
还有如果我想销毁C,该怎么改?
难道放到函数AB中吗
2016-03-25 12:47
快速回复:VS 编程 0x00F51693 处有未经处理的异常(在 单链表v.exe 中): 0xC000 ...
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020080 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved