| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 849 人关注过本帖
标题:[求助]哪里错误了,内存错误。
取消只看楼主 加入收藏
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
结帖率:79.31%
收藏
已结贴  问题点数:20 回复次数:5 
[求助]哪里错误了,内存错误。
大家好,下面程序是实现进至转换,
是我自己弄的,主要是利用链式站,
用顺序站没有问题!
我对链式不是很明白!

估计是pop哪里出错了!
提示的错误是c库里面的
是不是哪里调用错了!
请大家帮忙!
谢谢!



#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define Null 0
typedef struct SNode
{
    int data;
    struct SNode *next;
}SNode;

void InitStack(SNode *s);
int Empty(SNode *s);
int Push(SNode *s, int x);
int Pop(SNode *s);
void conversion(int i);
SNode q;

int main(void)
{
    int i;
    while(1)
    {   
        printf("将1个10进制数转换为2、8、16进制\n");
        printf("1:10->2\n2:10->8 \n");
        printf("3:10->16\n4:退出\n");
        printf("\n");
        do{
            printf("请输入(1--4):");
            scanf("%d",&i);
            if(getchar()!='\n')
                printf("输入非法!\n");
            break;
        }
        while(i<1 || i>4);
        
        switch(i)
        {
        case 1: conversion(2); break;
        case 2: conversion(8); break;
        case 3: conversion(16); break;
        case 4: exit(1);
        default:
            break;
        }
        printf("按回车键继续:");
        getchar();
        while(getchar()!='\n') ;
        system("cls");   
    }
}

void InitStack(SNode *s)
{     
    s=Null;
}   /* 初始化栈*/


int Empty(SNode *s)
{  
    if(s==Null)
        return 1;
    else
        return 0;
}    /* 判断栈是否为空*/


int Push(SNode *s, int x)
{   
    SNode *p;
    p=(SNode *)malloc(sizeof(SNode));
    p->data=x;
    p->next=Null;
    if(s==Null)
        s=p;
    else
    {
        p->next=s;
        s=p;
        return 1;
    }
}    /* 进栈 */

int Pop(SNode *s)
{   
    int e;
    SNode *p=s;
    if(Empty(s))
    {
        printf("出错");
        return 0;
    }
    else
    {
        e=s->data;
        s=s->next;
        free(p);
        return e;
    }
} /* 出栈*/

void conversion(int i)
{
    int e,n;
    InitStack(&q);
    printf("请输入一个数字:");
    scanf("%d",&n);
    while(n)
    {
        Push(&q,n%i);
        n/=i;
    }
    printf("结果是: ");
    while(!Empty(&q))
    {
        e = Pop(&q);
        if(e >= 10)
            putchar(e+87);   
        else
            printf("%d",e);
    }
    printf("\n");   
}
搜索更多相关主题的帖子: void conversion include 
2011-04-11 17:40
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
我原来用的是顺序站,只是想用链式转换一下,顺序站我会了,大家能帮我解决链式栈的问题吗?谢谢
2011-04-11 20:13
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
大哥可以帮忙更正吗!咱们链式站不是很懂!这次如果修改好了,我收获会很大的
2011-04-12 09:20
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
谢谢楼上的,我现在用手机上的,有个问题你POP那里怎么有两个*号.等我上机了,再找你,能留个邮箱或者QQ吗!谢谢。
2011-04-12 11:01
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
以下是引用thunder_2011在2011-4-12 11:20:53的发言:

两个**号是指针的指针
还是不明白 为什么要指针的指针呢!!
有一个指针还不可以吗!
两个指针怎么指啊!
能说得详细点吗
谢谢
2011-04-12 12:31
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
以下是引用thunder_2011在2011-4-12 14:48:35的发言:

哎,好人做到底吧,google你都懒得用


就拿你以前的初始化函数来说
void InitStack(SNode *s)
{     
    s=Null;
}   /* 初始化栈*/

其实这个函数一点作用都没有,你可以写个代码试一下char * p=(char *)malloc(10);
printf("%p\n",p);
InitStack(p);
printf("%p\n",p);
两次打印的p都是同一个值,原因就是我之前说的,函数内部不能改变指针的值,只能够修改指针指向的值,大致的原因就是编译器会为函数的每个参数生成一个临时副本,修改的只是临时副本的值,原有的值并没有被改变(想了解更多的话可以去网上搜一下,应该有很多。。很多)如果想获得修改后的,可以通过返回值,也可以通过传入指针的地址来实现,如果二级指针很难理解的话你也可以修改成通过返回值来实现,就像我给你修改过的push函数那样,返回一个指针。
我想问 怎么用return 返回值呢
2011-04-12 20:02
快速回复:[求助]哪里错误了,内存错误。
数据加载中...
 
   



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

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