相关疑难解决方法(0)

malloc()/ free()在哪里存储分配的大小和地址?

malloc()和free()在哪里存储分配的地址及其大小(Linux GCC)?我已经读过一些实现将它们存储在实际分配的内存之前的某个地方,但是在我的测试中我无法确认.

背景,也许有人有另一个提示:我正在尝试分析进程的堆内存,以确定另一个进程中字符串的当前值.访问进程堆内存并在其中漫步是没有问题的.但是,因为字符串的值发生了变化,并且进程每次都会分配内存的新部分,所以字符串的地址会发生变化.因为字符串有一个固定的格式,它仍然很容易找到,但经过一些更改后,旧版本的字符串仍然在堆内存中(可能已释放,但仍未被重用/覆盖),因此我无法分辨哪个字符串是当前字符串.

所以,为了仍然找到当前的那个,我想检查我在内存中找到的字符串是否仍然被使用,通过比较它的地址与malloc/free知道的地址.

ciao,Elmar

c memory heap free

15
推荐指数
1
解决办法
7253
查看次数

如何在源代码中查找内存泄漏

如果已知应用程序泄漏内存(执行时),那么在应用程序的源代码中找到此类内存泄漏错误的各种方法有哪些.
我知道某些解析器/工具(可能对代码进行静态分析)可以在这里使用但是有没有其他方法/技术可以做到这一点,特定于语言(C/C++)/平台?

c c++ memory-leaks

8
推荐指数
3
解决办法
8943
查看次数

为什么C中没有"memsize",它返回使用malloc在堆中分配的内存块的大小?

好.它可以在Visual Studio 中的_msize中调用.

但是为什么在使用malloc分配内存块的情况下,返回内存大小并不符合标准?因为我们无法判断malloc后面的返回指针指向了多少内存,所以我们可以使用这个"memsize"调用来返回我们需要的信息."memsize"将是特定于实现的,因为malloc/free

只是问,因为我必须在某个时候写一个包装器来存储大小的一些额外字节.

c memory-management

5
推荐指数
1
解决办法
3590
查看次数

Visual Studio 2010 C++:获取malloc分配的内存块大小

给定指向malloc分配的内存块的指针,如何获得它的大小?

例如:

void* ptr = malloc( 10 ); //Allocate 10 bytes
printf( "%d", GetMemSize( ptr ) ); //Should print 10
Run Code Online (Sandbox Code Playgroud)

我想这样做是为了调试目的.

c++ windows memory-management visual-studio

4
推荐指数
1
解决办法
2125
查看次数

如何跟踪malloc和免费?

可能重复:
简单的C实现跟踪内存malloc/free?

我需要知道我在C程序中使用了多少内存,这里是伪代码

#include <stdio.h>

int usedMemory =0;

void *MyMalloc(int size){
 usedMemory = usedMemory +size ;
 return malloc(size);
}

void MyFree(void *pointer){
/*****************what should i write here????*************/
}
int main(int argc, char *argv[])
{
    char *temp1= (char *)MyMalloc(100);
    char *temp2= (char *)MyMalloc(100);

    /*......other operations.........*/

    MyFree(temp1);
    MyFree(temp2);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以告诉我在MyFree方法中写什么(减少从usedMemory释放的内存量.

c

4
推荐指数
1
解决办法
3273
查看次数

迭代glibc malloc中所有竞技场中的所有块

任何对glibc malloc代码有一些基本想法的人都可以告诉我如何迭代所有竞技场并找出哪些是没有被释放的块,即它们的使用位被设置.我必须在退出流程时这样做.

要么

更确定的是,如果我们有一个竞技场,我们可以访问其中分配的第一个块吗?


感谢大家花时间回复.很长一段时间我发布了这个问题.'Phrack'在这些问题中列出了一些黑客技术.我受益于此.

问候,卡皮尔

malloc glibc

3
推荐指数
1
解决办法
954
查看次数

malloc函数将所有数据分配给相同的内存地址

现在,当我在块数组中打印每个元素时,每个元素都具有相同的地址.例如:

ints:   20 bytes stored at 0xbffa84fc 
doubles:   80 bytes stored at 0xbffa84fc 
chars:   8 bytes stored at 0xbffa84fc 
Students:   1008 bytes stored at 0xbffa84fc
Run Code Online (Sandbox Code Playgroud)

c malloc dynamic-memory-allocation

-1
推荐指数
1
解决办法
190
查看次数