QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

今天面试的一道题!

[复制链接]
发表于 2005-4-2 00:25:58 | 显示全部楼层
各位大兄!我在做一个表!!!帮助大家提高编程的效率!!!快成了
回复

使用道具 举报

发表于 2005-4-3 08:23:35 | 显示全部楼层
[quote:f9be6a20ab="sjinny"]
既把最后一次存储的数据取出,同时把那段空间释放。

既然题目要求每取一次数据就要进行一次内存释放…… [/quote]

移动一下 sp 把空间还给栈容器也算释放咯。
回复

使用道具 举报

发表于 2005-4-3 08:40:15 | 显示全部楼层
[code:1]#include <stdlib.h>

#define BUF_SZ (int)1024*1024*10

struct obj
{
        size_t sz;
        char buf[0];
} *bottom, *top;

struct obj *push ( void * data, size_t sz )
{
        char *bb = (char *)bottom;
        char *bt = (char *)top;
        struct obj *new_top = NULL;
       
        if ( top + sizeof (size_t) * 2 + top->sz + sz - bottom > BUF_SZ )
                /* Not enough space */
                return NULL;
        new_top = (struct top *)(bt + sizeof(size_t) + top->sz);
        new_top->sz = sz;
        top = new_top;
}

char * get_top ()
{
        return top->buf;
}

void pop ()
{
        struct obj *p = bottom;
        if ( bottom == top )
                return;
        while ( p + sizeof(size_t) + p->sz != top )
                p += (sizeof(size_t) + p->sz);
        top = p;
}[/code:1]

需要先 push 一个元素垫底
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-6 10:00 , Processed in 0.040524 second(s), 13 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表