| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4558 人关注过本帖
标题:在调试过程中出现“123.exe 中的 0x01161677 处最可能的异常: 0xC0000005: ...
只看楼主 加入收藏
wuzi2010ED
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2012-6-6
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:2 
在调试过程中出现“123.exe 中的 0x01161677 处最可能的异常: 0xC0000005: 写入位置 0x00000000 时发生访问冲突”的问题怎
下面是我编写的一段代码,请帮忙指点一下,我实在调不出来了。

//检查一个(单向)链表,删除其中数据大于100的元素

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

struct Link *AppendNode(int data,struct Link *head);
struct Link *DeleteNode(int data,struct Link *head);
void DispLink(struct Link *head);
void DeleteMemory(struct Link *head);

struct Link
{
    int data;
    struct Link *next;
};

main()
{
    int data;
    struct Link *head = NULL, *p, *pr = NULL;

    printf("Please input a node data:");
    scanf("%d",&data);

    while (data >= 0)
    {
        head = AppendNode(data,head);
        printf("Please input next node data:");
        scanf("%d",&data);
    }
    printf("Creating a link is succeeded.\n\n");
    printf("Before Deleting:\n\n");
    DispLink(head);
   
    p = head;
    while (p != NULL)
    {
        while (p->data <= 100)
        {
            pr = p;
            p = p->next;
        }
        head = DeleteNode(p->data,head);
    }
    printf("After Deleting:\n\n");
    DispLink(head);
    DeleteMemory(head);
}

struct Link *AppendNode(int data,struct Link *head)
{
    struct Link *p = NULL,*pr = head;

    p = (struct Link *)malloc(sizeof(struct Link));
    if (p == NULL)
    {
        printf("No ennough memory to alloc!");
        exit(0);
    }

    if (head == NULL)
    {
        head = p;
    }
    else
    {
        while (pr->next != NULL)
        {
            pr = pr->next;
        }
        pr->next = p;
    }
    pr = p;

    pr->data = data;
    pr->next = NULL;

    return head;
}

struct Link *DeleteNode(int data,struct Link *head)
{
    struct Link *p = head, *pr = head;

    if (head == NULL)
    {
        printf("No Link Table!");
        return head;
    }

    while (data != p->data && p->next != NULL)
    {
        pr = p;
        p = p->next;
    }
    if (data == p->data)
    {
        if (p == head)
        {
            head = p->next;
        }
        else
        {
            pr->next = p->next;
        }
        free(p);
    }
    else
    {
        printf("Did not find the Node.");
    }
    return head;
}

void DispLink(struct Link *head)
{
    struct Link *p = head;
    int j = 1;

    while (p != NULL)
    {
        printf("%5d%10d\n",j,p->data);
        p = p->next;
        j++;
    }
}

void DeleteMemory(struct Link *head)
{
    struct Link *p = head, *pr = NULL;

    while (p != NULL)
    {
        pr = p;
        p = p->next;
        free (pr);
    }
}

万分感谢各位大神的帮忙!!

[ 本帖最后由 wuzi2010ED 于 2012-6-6 10:53 编辑 ]
搜索更多相关主题的帖子: include 元素 head 
2012-06-06 10:47
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:10 
写入位置 0x00000000 时发生访问冲突

这是空指针导致的 具体代码太长没看。。
2012-06-06 10:48
missu_1314
Rank: 2
等 级:论坛游民
帖 子:46
专家分:98
注 册:2010-9-8
收藏
得分:10 
# include <stdio.h>
# include <stdlib.h>
# include <malloc.h>


typedef struct Link            //用一个 typedef 简化代码
{
    int data;
    struct Link * pNext;
}LINK, * PLINK;

PLINK Init_List(void);
void DeleteMemory(PLINK);

PLINK AppendNode(int, PLINK);
void DeleteNode(PLINK  pHead);
void Display_List(PLINK);



int main(void)
{

    PLINK pHead = NULL;
    pHead = Init_List();
    Display_List(pHead);



 return 0;
}


PLINK Init_List(void)
{
    int len;
    int i;

    PLINK pHead = (PLINK)malloc(sizeof(LINK));
    if (NULL == pHead)
    {
        printf("分配内存失败!");
        exit(-1);
    }
    else
    {
        pHead->pNext = NULL;
    }

    PLINK p =  pHead->pNext;
   
    printf("请输入要创建的链表的节点个数:\n");
    scanf("%d", &len);

    for (i = 1; i <= len; i++)
    {
        PLINK pNew = (PLINK)malloc(sizeof(LINK));
        if (NULL == pHead)
        {
            printf("分配内存失败!");
            exit(-1);
        }
        else
        {
            pNew->pNext = NULL;
        }


        printf("请输入第%d个节点的数据:\n", i);
        scanf("%d", &pNew->data);

        if (p == pHead->pNext)   //放在头节点后面
        {
            pHead->pNext = pNew;
            pNew->pNext  =  NULL;
        }
        else        // 插在第一个节点前面
        {
            pNew->pNext = pHead->pNext;
            pHead->pNext = pNew;

        }
    }

    return pHead;
}


/////////////////////////////
void Display_List(PLINK pHead)
{
    PLINK p = pHead->pNext;

    if (NULL == p)
    {
        printf("链表为空!");
        return;
    }
    else
    {
        while (NULL != p)
        {
            printf("%d\t", p->data);
            p = p->pNext;
        }
    }

   printf("\n");
    return;
}

////////////
void DeleteNode(PLINK  pHead)
{
   PLINK pFirst, p, q, pOld;
   pFirst = p = q = pOld = pHead->pNext;

   if ( pHead->pNext == NULL)
   {
       printf("链表没有元素!");
       return;
   }

   while (NULL != p)
   {
       if (p->data > 100)
       {
           if (pFirst == p)               //删除的节点是 第一个节点
           {
               pHead->pNext = p->pNext;
               p = pOld;
               free(q);
               
           }
           else                     //删除的节点不是 第一个
           {
               pOld->pNext = p->pNext;
               p = pOld;
               free(q);
              
           }
       }

       pOld = p;
       p = p->pNext;
       q = p;
   }
   
       if (NULL == p)                //如果比较之后, p到了表尾,那么就是说中间没有记录
        {
            printf("没有记录!\n");
            return;
        }

    return;
}



写了2个函数 没写完, 主要是  初始化链表, 和遍历链表,   初始化的时候 采用的是直接插在 第一个节点前面.  当然也可以放在表尾, 不过放表头最简单.

[ 本帖最后由 missu_1314 于 2012-6-6 12:53 编辑 ]
2012-06-06 11:46
快速回复:在调试过程中出现“123.exe 中的 0x01161677 处最可能的异常: 0xC0000 ...
数据加载中...
 
   



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

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