- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用静态数组编写一个 malloc 函数
代码在这里
#define h_footer(h_d_r) ((footer*)(((void*)(h_d_r)) + (h_d_r)->size+ FOOTER_SIZE))
#define f_header(f_t_r) ((header*)(((void*)(f_t_r)) - (f_t_r)->size- FOOTER_SIZE))
#define flag(fhdr) ((fhdr)->flag)
#define mark(fhdr) ((fhdr)->flag=1)
#define unmark(fhdr) ((fhdr)->flag=0)
#define next(fhdr) ((header*)((fhdr)->next))
#define prev(fhdr) ((header*)((fhdr)->prev))
#define MAX_STACK_SIZE 1000000000
int8_t st[MAX_STACK_SIZE];
typedef struct Header
{
size_t size;
size_t flag;
void* prev;
void* next;
} header;
typedef struct Footer
{
size_t size;
size_t flag;
} footer;
size_t FOOTER_SIZE=sizeof(footer);
size_t HEADER_SIZE=sizeof(header);
header* start_hdr;
footer* end_ftr;
size_t blk_size;
size_t occupied_length=0;
void *malloc(size_t size)
{
//puts("malloc!");
//printf("MSG:malloc size %zx\n",size);
//printf("MSG:malloc size %zx %zx %zx %zx",sizeof(void*),sizeof(char),sizeof(size_t),sizeof(header));
if(size<HEADER_SIZE+FOOTER_SIZE)
{
size=HEADER_SIZE+FOOTER_SIZE;
}
static char flag=1;
header* cur;
header* record;
footer* cur_f;
footer* record_f;
// size_t temp;
extern int8_t st[MAX_STACK_SIZE];
//initialize the header and footer;
if(flag)
{
puts("init");
start_hdr=st;
mark(start_hdr);
start_hdr->size= 0;
//initialize the whole block
header* freeblk_hd=(void*) (st+HEADER_SIZE);
freeblk_hd->size=MAX_STACK_SIZE-HEADER_SIZE-FOOTER_SIZE-sizeof(size_t)-FOOTER_SIZE;//for safety
//unmark(freeblk_hd);
//footer* freeblk_ft;
//freeblk_ft=h_footer(freeblk_hd);
//freeblk_ft->size=MAX_STACK_SIZE-HEADER_SIZE-FOOTER_SIZE-sizeof(size_t)-FOOTER_SIZE;//for safety
//unmark(freeblk_ft);
// start_hdr->next= (void*)freeblk_hd;
// printf("%p \n",start_hdr);
// start_hdr->prev= (void*)freeblk_hd;
//freeblk_hd->next=start_hdr;
//freeblk_hd->prev=start_hdr;
printf("%p \n",start_hdr);
end_ftr=(void*)freeblk_ft+FOOTER_SIZE;
printf("33 %p \n",end_ftr);
end_ftr->size = 0;
mark(end_ftr);
flag=0;
printf("1 %p \n",start_hdr);
printf("2 %p \n",start_hdr);
printf("3 %p \n",start_hdr);
printf("4 %p \n",start_hdr);
printf("5 %p \n",start_hdr);
printf("6 %p \n",start_hdr);
printf("7 %p \n",start_hdr);
}
printf("%p \n",start_hdr);
puts("find free!");
printf("%p \n",start_hdr);
printf("%p \n",st);
cur=next(start_hdr);
puts("find free!");
record=start_hdr;
puts("find free!");
//printf("\nptr ustart:%p, end block: %pthen\n",start_hdr, end_ftr);
while(cur!=start_hdr)
{
if( cur->size >= size && (record->size > cur->size || record->size==0) )
{
record=cur;
}
//printf("%p %zx\n", cur, cur->size);
cur=next(cur);
}
//printf("get idear %p", record);
if(record!=start_hdr)
{
if(record->size > size+HEADER_SIZE+FOOTER_SIZE)
{
//puts("split!");
cur=(void*)record+ size+FOOTER_SIZE*2;
record_f=(void*)record+size+FOOTER_SIZE;
//this block will set all the information for the cur blk
//2 size, 2 flag
cur->size=record->size-size-FOOTER_SIZE*2;
cur_f=h_footer(cur);
cur_f->size=cur->size;
unmark(cur);
unmark(cur_f);
// debuging line
//if(cur_f!=h_footer(record)){puts("footer mistake");exit(0);}
//this block will set all the information for the record blk
//2 size, 2 flag
record->size=size;
record_f->size=size;
mark(record);
mark(record_f);
// this block will replace the record blk with curblk
cur->next=record->next;
cur->prev=record->prev;
next(cur)->prev=(void*) cur;
prev(cur)->next=(void*) cur;
//return ptr
//printf(" malloc ptr %p\n",(void*)record+ FOOTER_SIZE);
return (void*) record+ FOOTER_SIZE;
}
else
{
//puts("needn't split!");
next(record)->prev=record->prev;
prev(record)->next=record->next;
record_f=h_footer(record);
mark(record);
mark(record_f);
// debuging line
//if(record->size!=record_f->size){puts("footer mistake");exit(0);}
//printf(" malloc ptr %p, actual malloc size %zx\n",(void*)record+ FOOTER_SIZE,record->size);
return (void*) record+ FOOTER_SIZE;
}
}
else
{
printf("MEMORY ERROR: exceed maximam allocation bound");
exit(0);
}
}
但是运行以段错误结束
有输出
init
0x7f2ce1c984e0
0x7f2ce1c984e0
33 0x7f2d1d644ed8
1 0x7f2ce1c984e0
2 0x1
3 0x1
4 0x1
5 0x1
6 0x1
7 0x1
0x1
find free!
0x1
0x7f2ce1c984e0
我想知道为什么指针值会变成0x1,以及如何修复它。我不熟悉 gdb,所以我使用 print 进行调试。
最佳答案
可能是因为您正在重新定义 malloc
,它可能在 printf
的深处某处被调用。您不允许插入自己的 malloc
。从技术上讲,代码会调用未定义的行为,任何事情都可能发生。
其次,文件作用域数组 uint8_t st[1000000000]
可能超出您的 C 实现的能力。
关于c - 指针内容变为 0x1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26808563/
我正在为我的按钮使用 onClick 功能。我的按钮代码如下所示: Button 1 Button 2 我的 JS 函数如下所示: function fadeNext(selectedId, spee
首先,我想提一下,我理解每个人在不提供至少一些试验或错误的情况下提出问题的感受,但这纯粹是一种知识需求,话虽如此,我会去提前问。 我一直无法弄清楚如何将保存在 MySQL 表中的 600-1000 个
我想做的事情有点令人困惑,而且我英语不太好,所以我先把代码贴在这里,这样你就可以很容易地理解: 以下是表单内容: Testing for Stackoverflow Option1
我学习 SDL 二维编程已有一段时间了,现在我想创建一个结合使用 SDL 和 OpenGL 的程序。我是这样设置的: SDL_Init(SDL_INIT_VIDEO); window = SDL_Cr
我创建了 2 个 data-* 标签。数据类别和数据标签。单击 href 标签后,我想复制该数据类别和数据标签以形成输入。我的代码是:
我想用 CSS 换行。我正在使用内容。 td:before { content: "Test\A Test2"; } 它不工作。如何正确
这个问题已经有答案了: Java Class that implements Map and keeps insertion order? (8 个回答) 已关闭 6 年前。 我有一个 HashMap
我正在尝试使用 JMeter 执行端到端测试。测试涉及写入SFTP文件夹并从另一个SFTP文件夹读取写入操作生成的文件。 我能够使用 JMeter SSH SFTP 插件连接到 SFTP 文件夹,并能
您好,我有带有标准服务器端 Servlet 的 GWT 客户端。 我可以从 GWT 客户端上传文件并在服务器端读取其内容 我可以将其作为字符串发送回客户端 但是 我有 GWT FormPanel与操作
我在 Plone 4.3.9 中创建了一个自定义类型的灵巧性,称为 PersonalPage,必须只允许在特定文件夹中使用 成员文件夹/用户文件夹 . 在他的 FTI 中,默认情况下 False .
在新(更新)版本的应用程序中更改小部件布局的最佳做法是什么?当新版本提供更新、更好的小部件时,如何处理现有小部件? 最佳答案 我认为您必须向用户显示一个弹出窗口,说明“此版本中的新功能”并要求他们重新
在我的应用程序中,我使用支持 View 寻呼机和 PagerTabStrip。进入查看寻呼机我有一些 fragment ,进入其中一个我正在使用支持卡片 View 。运行应用程序后,所有卡片 View
我有以下布局文件。基本上我有谷歌地图,在左上角我有一个 TextView,我需要在其中每 15 秒保持一次计数器以刷新 map 。布局很好。
我使用如下结构: HashMap > > OverallMap 如果我这样做: OverallMap . clear ( ) clear() 丢弃的所有内容(HashMap 对象、Integer 对
我在数据库中有 1000 张图像。在页面加载时,我随机显示 60 张图片,当用户滚动时,我通过 AJAX 请求添加 20 张图片。 第一种方法 我所做的是将所有图像加载到一个容器中,然后隐藏所有图像并
我正在使用 woocommerce 创建一个网上商店。 我想在每个产品上添加一个包含产品信息的表格,例如颜色、交货时间等等。 但是当我添加这张表时。本产品消失后的所有内容。 我的表的代码: td {
This question already has an answer here: What does an empty value for the CSS property content do?
因此,我正在与我的 friend 一起为 Google Chrome 开发一个扩展程序,对于大多数功能(即日历、设置等),我们打开一个模式,这样我们就不必重定向到另一个页面。当您在内容之外单击时,我们
我将可变高度的 CSS 框设置为在更大的 div 中向左浮动。现在我想添加一个标题,其中文本在框的左侧垂直显示(旋转 90 度),如下面的链接所示(抱歉还不能发布图片)。 http://imagesh
相关页面位于 www.codykrauskopf.com/circus 如果您查看我页面的右侧,在半透明容器和浏览器窗口边缘之间有一个间隙。我看了看,出于某种原因,wrap、main、content
我是一名优秀的程序员,十分优秀!