如果我说:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *x;
char *y;
int main() {
x = malloc(sizeof("Hello, world!"));
strcpy(x, "Hello world!");
y = "Hello, world";
free(x);
fprintf(stderr, "okay");
free(y);
}
Run Code Online (Sandbox Code Playgroud)
然后,显然,程序将打印"okay",然后死亡,因为"指针被释放未被分配" - 显然,因为字符串是一个字符串文字.
我想编写一个在给定字符串文字时不执行任何操作的函数,但在给定非字符串文字时调用free.这有可能,如果是的话,怎么样?
我不认为标准有什么用于检查指针是否由malloc返回(并且你只应该将它们传递给free)所以我会说不,你找不到它.你必须自己跟踪它.
不可以.在C中,您必须跟踪自己分配的内容.
某些malloc实现(例如dlmalloc)为检查堆提供了一些额外的功能,但您不应该依赖它们. dlmalloc具有该函数dlmalloc_inspect_all,它将遍历堆并返回malloc已分配的所有内存区域,但内存映射块除外.因此,您可以使用它来测试指针是否指向非内存映射分配,但一般来说这仍然是一个坏主意.
在Windows上,甚至不要考虑使用[ IsBadReadPtr]来测试指针是否指向可读内存 - 它应该被真正调用CrashProgramRandomly.
| 归档时间: |
|
| 查看次数: |
1997 次 |
| 最近记录: |