![]() |
1
10
文档。
如果编写调用者的人拒绝遵循API,事情就会崩溃。他们拒绝按你的规矩办事,结果事情就一团糟了。他们期望什么? |
![]() |
2
4
归根结底,C中的指针只不过是一个机器字,它可能指向进程内存中的大量数据,也可能不指向,这些数据可能由malloc分配,也可能不由malloc分配。任何指针上都没有此类信息。
|
![]() |
3
2
无法确定指针所指向的区域是否已被删除
关于你问题的更多信息会很好。 |
![]() |
4
2
一种可能的方法。 抽象的。
|
![]() |
5
2
用户首先应该如何获得这个malloc'ed指针?这不可能是由API中的另一个函数获得的吗?否则对我来说,这听起来像样板代码,在调用函数之前必须用malloc分配一块内存。 在你的情况下我会试试的。让调用者通过我提供的函数获得一个有效的指针,并通过另一个函数释放它。更妙的是,将其全部包裹在一个不透明的结构中。
在你的API中这有意义吗? 有了自己的类型,即使是最蹩脚的用户也会很清楚,他必须通过预期的init\u param()函数获得它。 |
![]() |
6
0
|
![]() |
7
0
如果只有指针值,则没有(标准)方法来确定该指针值是否由
一个策略,可能值得或不值得的努力(输入法,它不是)是隐藏
|
![]() |
8
0
请注意,如果realloc失败,它将返回一个空指针,但原始malloc的内存保持不变,这是内存泄漏的常见来源。 |
![]() |
9
0
编写一个分配函数(可以是一个简单的包装器)
您还需要创建一个匹配的“free”函数。
有更强大的方法,你可以执行这一点,但我不确定是否值得的麻烦。你不可能完全证明一个API是傻瓜(你会惊讶于现在傻瓜的能力有多强)。无论最终实现什么,确保正确使用API的最佳方法是提供清晰、全面的文档。 对不起,你只能靠自己了。 |
![]() |
10
0
如果您正在寻找编译时检查,您唯一真正能做的就是声明一些新类型,这些类型由“已批准”的分配调用返回。我建议如下: typedef struct MEM_INFO {void *ptr; int allocsize; struct *privateMemInfo priv;} ALLOCMEM[0];
ALLOCMEM foo = {0}; if (reallocate(foo,12345) >= 0) /* It worked */ |
![]() |
11
0
在C库中,这是一种常见的做法: |
![]() |
altair00 · 使用“realloc”调整现有阵列的大小` 3 年前 |
![]() |
Ben Osborne · C增加字符数组的字符数组大小 7 年前 |
|
SonicN · realloc调用中的写入无效[已关闭] 8 年前 |
![]() |
Nabila K · realloc:返回损坏的数据 8 年前 |
![]() |
begginer3 · 为什么这行不通?动态内存初学者程序 9 年前 |
![]() |
Hawk · 通过动态分配空间在套接字上执行recv() 10 年前 |