相关疑难解决方法(0)

如何知道指针是指向堆还是堆栈?

例:

bool isHeapPtr(void* ptr)
{
     //...
}

int iStack = 35;
int *ptrStack = &iStack;
bool isHeapPointer1 = isHeapPtr(ptrStack); // Should be false
bool isHeapPointer2 = isHeapPtr(new int(5)); // Should be true
/* I know... it is a memory leak */
Run Code Online (Sandbox Code Playgroud)

为什么,我想知道这个:

如果我在一个类中有一个成员指针,我不知道指向对象是否是新分配的.然后我应该使用这样的实用程序来知道我是否需要delete指针.

但是:
我的设计尚未完成.所以,我会按照我一直以来的方式编程delete.我要避免垃圾编程

c++ pointers memory-management

27
推荐指数
6
解决办法
9602
查看次数

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

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

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

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

c c++ malloc pointers memory-management

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

我可以检查指针是否由malloc/calloc/realloc分配?

我想知道是否可以检查传递给函数的指针是否由malloc/calloc/realloc分配?

int main(){
    struct something o;
    struct something *a;
    a = malloc(sizeof(struct something));
    freeSome(&o);/*This would normally throw an (corruption?) error*/
    freeSome(a);/*This is fine*/
}

void freeSome(struct something * t){
    if (/*expression here*/){
        free(t);
    }
}
Run Code Online (Sandbox Code Playgroud)

我明白,通常你会检查是否t == NULL,但我只是想知道是否有可能看到是否已为给定指针分配内存.

c memory-management

13
推荐指数
2
解决办法
1万
查看次数

标签 统计

memory-management ×3

c ×2

c++ ×2

pointers ×2

malloc ×1