Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
itdan3344
stb
提交
0d840ab3
S
stb
项目概览
itdan3344
/
stb
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
S
stb
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
0d840ab3
编写于
1月 21, 2015
作者:
S
Sean Barrett
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
quick & dirty leak checker
上级
ec215838
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
150 addition
and
0 deletion
+150
-0
stb_leakcheck.h
stb_leakcheck.h
+117
-0
stb_vorbis.c
stb_vorbis.c
+7
-0
tests/stb.dsp
tests/stb.dsp
+8
-0
tests/test_vorbis.c
tests/test_vorbis.c
+18
-0
未找到文件。
stb_leakcheck.h
0 → 100644
浏览文件 @
0d840ab3
// stb_leakcheck.h - v0.1 - quick & dirty malloc leak-checking - public domain
#ifdef STB_LEAKCHECK_IMPLEMENTATION
#undef STB_LEAKCHECK_IMPLEMENTATION // don't implenment more than once
// if we've already included leakcheck before, undefine the macros
#ifdef malloc
#undef malloc
#undef free
#undef realloc
#endif
#include <stdlib.h>
#include <stdio.h>
#include <stddef.h>
typedef
struct
malloc_info
stb_leakcheck_malloc_info
;
struct
malloc_info
{
char
*
file
;
int
line
;
size_t
size
;
stb_leakcheck_malloc_info
*
next
,
*
prev
;
};
static
stb_leakcheck_malloc_info
*
mi_head
;
void
*
stb_leakcheck_malloc
(
size_t
sz
,
char
*
file
,
int
line
)
{
stb_leakcheck_malloc_info
*
mi
=
malloc
(
sz
+
sizeof
(
*
mi
));
if
(
mi
==
NULL
)
return
mi
;
mi
->
file
=
file
;
mi
->
line
=
line
;
mi
->
next
=
mi_head
;
if
(
mi_head
)
mi
->
next
->
prev
=
mi
;
mi
->
prev
=
NULL
;
mi
->
size
=
(
int
)
sz
;
mi_head
=
mi
;
return
mi
+
1
;
}
void
stb_leakcheck_free
(
void
*
ptr
)
{
if
(
ptr
!=
NULL
)
{
stb_leakcheck_malloc_info
*
mi
=
(
stb_leakcheck_malloc_info
*
)
ptr
-
1
;
mi
->
size
=
~
mi
->
size
;
#ifndef STB_LEAKCHECK_SHOWALL
if
(
mi
->
prev
==
NULL
)
{
assert
(
mi_head
==
mi
);
mi_head
=
mi
->
next
;
}
else
mi
->
prev
->
next
=
mi
->
next
;
if
(
mi
->
next
)
mi
->
next
->
prev
=
mi
->
prev
;
#endif
}
}
void
*
stb_leakcheck_realloc
(
void
*
ptr
,
size_t
sz
,
char
*
file
,
int
line
)
{
if
(
ptr
==
NULL
)
{
return
stb_leakcheck_malloc
(
sz
,
file
,
line
);
}
else
if
(
sz
==
0
)
{
stb_leakcheck_free
(
ptr
);
return
NULL
;
}
else
{
stb_leakcheck_malloc_info
*
mi
=
(
stb_leakcheck_malloc_info
*
)
ptr
-
1
;
if
(
sz
<=
mi
->
size
)
return
ptr
;
else
{
#ifdef STB_LEAKCHECK_REALLOC_PRESERVE_MALLOC_FILELINE
void
*
q
=
stb_leakcheck_malloc
(
sz
,
mi
->
file
,
mi
->
line
);
#else
void
*
q
=
stb_leakcheck_malloc
(
sz
,
file
,
line
);
#endif
if
(
q
)
{
memcpy
(
q
,
ptr
,
mi
->
size
);
stb_leakcheck_free
(
ptr
);
}
return
q
;
}
}
}
void
stb_leakcheck_dumpmem
(
void
)
{
stb_leakcheck_malloc_info
*
mi
=
mi_head
;
while
(
mi
)
{
if
((
ptrdiff_t
)
mi
->
size
>=
0
)
printf
(
"LEAKED: %s (%4d): %8z bytes at %p
\n
"
,
mi
->
file
,
mi
->
line
,
mi
->
size
,
mi
+
1
);
mi
=
mi
->
next
;
}
#ifdef STB_LEAKCHECK_SHOWALL
mi
=
mi_head
;
while
(
mi
)
{
if
((
ptrdiff_t
)
mi
->
size
<
0
)
printf
(
"FREED : %s (%4d): %8z bytes at %p
\n
"
,
mi
->
file
,
mi
->
line
,
~
mi
->
size
,
mi
+
1
);
mi
=
mi
->
next
;
}
#endif
}
#endif // STB_LEAKCHECK_IMPLEMENTATION
#ifndef INCLUDE_STB_LEAKCHECK_H
#define INCLUDE_STB_LEAKCHECK_H
#define malloc(sz) stb_leakcheck_malloc(sz, __FILE__, __LINE__)
#define free(p) stb_leakcheck_free(p)
#define realloc(p,sz) stb_leakcheck_realloc(p,sz, __FILE__, __LINE__)
extern
void
*
stb_leakcheck_malloc
(
size_t
sz
,
char
*
file
,
int
line
);
extern
void
*
stb_leakcheck_realloc
(
void
*
ptr
,
size_t
sz
,
char
*
file
,
int
line
);
extern
void
stb_leakcheck_free
(
void
*
ptr
);
extern
void
stb_leakcheck_dumpmem
(
void
);
#endif // INCLUDE_STB_LEAKCHECK_H
stb_vorbis.c
浏览文件 @
0d840ab3
...
...
@@ -327,6 +327,8 @@ extern int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buf
#endif
extern
void
stb_vorbis_free
(
void
*
p
);
//////// ERROR CODES
enum
STBVorbisError
...
...
@@ -592,6 +594,11 @@ typedef float codetype;
typedef
uint16
codetype
;
#endif
//#define STB_LEAKCHECK_IMPLEMENTATION
//#define STB_LEAKCHECK_SHOWALL
//#include "stb_leakcheck.h"
//void stb_vorbis_dumpmem(void) { stb_leakcheck_dumpmem(); }
// @NOTE
//
// Some arrays below are tagged "//varies", which means it's actually
...
...
tests/stb.dsp
浏览文件 @
0d840ab3
...
...
@@ -122,6 +122,10 @@ SOURCE=..\stb_image_write.h
# End Source File
# Begin Source File
SOURCE=..\stb_leakcheck.h
# End Source File
# Begin Source File
SOURCE=..\stb_perlin.h
# End Source File
# Begin Source File
...
...
@@ -162,6 +166,10 @@ SOURCE=.\test_truetype.c
# End Source File
# Begin Source File
SOURCE=.\test_vorbis.c
# End Source File
# Begin Source File
SOURCE=.\textedit_sample.c
# End Source File
# End Target
...
...
tests/test_vorbis.c
0 → 100644
浏览文件 @
0d840ab3
#define STB_VORBIS_HEADER_ONLY
#include "stb_vorbis.c"
#include "stb.h"
extern
void
stb_vorbis_dumpmem
(
void
);
#ifdef VORBIS_TEST
int
main
(
int
argc
,
char
**
argv
)
{
size_t
memlen
;
unsigned
char
*
mem
=
stb_fileu
(
"c:/x/01.ogg"
,
&
memlen
);
int
chan
,
samplerate
;
short
*
output
;
int
samples
=
stb_vorbis_decode_memory
(
mem
,
memlen
,
&
chan
,
&
samplerate
,
&
output
);
stb_vorbis_dumpmem
();
return
0
;
}
#endif
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录