相关疑难解决方法(0)

找出指针是指向堆栈,堆还是程序文本?

有没有办法找出指针是否指向以下位置:

  • 堆栈
  • 或者程序(如果是的话,哪个部分例如elf .text)?

此外,这可以移植(Linux 64/32位,OSX和Windows 7+)吗?

跟进:

我不是想弄清楚是不是有些东西已被malloc.

我想有效地将​​void*指针与程序中的函数区分开来,从void*指针到堆栈或堆上的数据.

这适用于用C编写的语言运行库,而不是"普通"C程序.

到目前为止,这个答案是最有用的:检查某些东西是否已被malloced

c pointers

20
推荐指数
1
解决办法
4840
查看次数

检查指针是否指向堆上已分配的内存

我想知道指针是否指向一个用malloc/new分配的内存.我意识到任意地址的答案是"不,你不能",但我认为可以覆盖malloc/free并跟踪分配的内存范围.

您是否知道提供此特定工具的内存管理库?
你知道生产代码吗?

Valgrind很棒,但是仪表太多了(慢)并且Will说我们不想像这样使用Valgrind(使得软碰撞足够好).
Mudflap是一个非常好的解决方案,但是专门用于GCC,遗憾的是,检查不会简单地返回一个布尔值(请参阅下面的答案).
请注意,检查内存写入是否合法是一个安全问题.所以寻找表现是有动力的.

c c++ malloc pointers memory-management

15
推荐指数
3
解决办法
2万
查看次数

你可以确定一个字符串是否可以在C中释放?

如果我说:

#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.这有可能,如果是的话,怎么样?

c malloc

5
推荐指数
2
解决办法
1997
查看次数

标签 统计

c ×3

malloc ×2

pointers ×2

c++ ×1

memory-management ×1