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

0x00F51693 处有未经处理的异常(在 单链表v.exe 中):  0xC0000005:  读取位置 0xCDCDCDD1 时发生访问冲突。
求助到底什么是原因?
2016-03-22 22:34
小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
小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
小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.022066 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved