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

估计是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
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:7 
楼主你还是用顺序栈吧 标准库里面就有
程序代码:
/*4.将任一整数转换为二进制形式*/

#include <stack>
#include <stdio.h>
using namespace std;
int main()
{
    int a = 8;
    int i = 0;
    //cin>>a;
    stack<int> s;
    while(a)
    {
        s.push(a%2);
        a /=2;
    }
    while(!s.empty())
    {
        printf("%d ",s.top());
        s.pop();
    }
    return 0;
}
上面的代码在VC6.0里面没错

                                         
===========深入<----------------->浅出============
2011-04-11 19:06
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
我原来用的是顺序站,只是想用链式转换一下,顺序站我会了,大家能帮我解决链式栈的问题吗?谢谢
2011-04-11 20:13
变幻小子
Rank: 6Rank: 6
来 自:广东陆丰
等 级:侠之大者
帖 子:188
专家分:473
注 册:2011-3-4
收藏
得分:7 
路过学习

明天的梦
2011-04-11 20:16
thunder_2011
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:100
注 册:2011-4-11
收藏
得分:7 
push和pop两个函数都不对
错在这里了:把指针作为函数参数传递进来的话,函数内部并不能改变指针,只能改变指针指向的值,如果要改变指针的话,可以用返回值返回新指针或者将指针的地址作为函数参数传递进来才可以。
2011-04-12 00:27
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
大哥可以帮忙更正吗!咱们链式站不是很懂!这次如果修改好了,我收获会很大的
2011-04-12 09:20
thunder_2011
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:100
注 册:2011-4-11
收藏
得分:0 
程序代码:
#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);
SNode * Push(SNode *s, int x);  //修改了返回值
int Pop(SNode **s);       //修改了参数
void conversion(int i);
SNode * head;      //定义一个头指针

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;
}    /* 判断栈是否为空*/


SNode * 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;
    }
    return s;
}    /* 进栈 */

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(&head);   //调用时传入指针地址
    printf("请输入一个数字:");
    scanf("%d",&n);
    while(n)
    {
        head=Push(head,n%i);   //调用push,压栈后得到新的头指针。
        n/=i;
    }
    printf("结果是: ");
    while(!Empty(head))
    {
        e = Pop(&head);     //调用时传入指针地址
        if(e >= 10)
            putchar(e+87);  
        else
            printf("%d",e);
    }
    printf("\n");  
} 


刚跑了下是ok 的,主要就是修改了那三个函数。
2011-04-12 09:28
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
谢谢楼上的,我现在用手机上的,有个问题你POP那里怎么有两个*号.等我上机了,再找你,能留个邮箱或者QQ吗!谢谢。
2011-04-12 11:01
thunder_2011
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:31
专家分:100
注 册:2011-4-11
收藏
得分:0 
两个**号是指针的指针
2011-04-12 11:20
xiaxun
Rank: 1
等 级:新手上路
帖 子:207
专家分:7
注 册:2009-8-30
收藏
得分:0 
以下是引用thunder_2011在2011-4-12 11:20:53的发言:

两个**号是指针的指针
还是不明白 为什么要指针的指针呢!!
有一个指针还不可以吗!
两个指针怎么指啊!
能说得详细点吗
谢谢
2011-04-12 12:31
快速回复:[求助]哪里错误了,内存错误。
数据加载中...
 
   



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

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