标签: free

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

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

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

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

ciao,Elmar

c memory heap free

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

为什么不将free(p)设置为NULL?

任何原因导致这不能成为标准行为free()

多个指针指向同一个对象:

#include <stdlib.h>
#include <stdio.h>

void safefree(void*& p)
{
    free(p); p = NULL;
}

int main()
{
    int *p = (int *)malloc(sizeof(int));
    *p = 1234;
    int*& p2 = p;
    printf("p=%p p2=%p\n", p, p2);
    safefree((void*&)p2);
    printf("p=%p p2=%p\n", p, p2);
    safefree((void*&)p); // safe

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

来自malloc要求的转让void*

反之亦然:

safefree()要求转向void*&(参考)

c c++ free memory-leaks memory-management

15
推荐指数
5
解决办法
4901
查看次数

C - 设计你自己的free()函数

今天,我出现了面试,面试官问我这个,

  1. 告诉我的步骤,你将如何设计自己的free( )功能,用于解除分配所分配的内存.
  2. 它如何比C的默认free()功能更有效?你能得出什么结论?

我很困惑,想不出设计的方式.

你们觉得怎么样 ?


编辑:既然我们需要知道如何malloc()工作,你能告诉我编写自己的malloc()功能的步骤

c malloc free

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

带有C参数的free()语法

我正在努力将许多C程序从Unix转换为Linux,这种free()语法引起了我的注意:

free((char *) area );
Run Code Online (Sandbox Code Playgroud)

这和之间有什么区别free( area );

c malloc syntax free

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

恢复变量的自由记忆的正确方法

我创建了一个旨在获取用户输入的函数.它要求将内存分配给保存用户输入的变量; 但是,该函数在函数结束时返回.释放已分配内存/返回变量值的正确方法是什么?

这是代码:

char *input = malloc(MAX_SIZE*sizeof(char*));
int i = 0;
char c;

while((c = getchar()) != '\n' && c != EOF) {
    input[i++] = c;
}

return input;
Run Code Online (Sandbox Code Playgroud)

我应该返回输入地址并在使用后将其释放吗?

对于释放输入变量的最合适方法感到好奇.

c memory malloc free

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

两次指针自由调用

我在讲座中被教过,free()两次拨打指针真是非常糟糕.我知道NULL在释放它之后立即设置指针是一种很好的做法.

但是,我仍然没有听到任何解释为什么会这样.根据我的理解,方式malloc()有效,它应该在技术上跟踪它已经分配的指针并让你使用.那么为什么它不知道它接收到的指针是否free()已被释放?

当你打电话free()给以前已经被释放的位置时,我很乐意理解,内部会发生什么.

c malloc free pointers dynamic-memory-allocation

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

释放后重新分配指针变量

这合法吗?ptr它可以在被释放后分配给它吗?

int * ptr = (int*) malloc(sizeof(int));
free(ptr);
ptr = (int *) malloc(sizeof(int));
Run Code Online (Sandbox Code Playgroud)

c free pointers dynamic-memory-allocation

15
推荐指数
5
解决办法
2881
查看次数

malloc和免费代码

我在哪里可以找到我的gcc编译器目前使用的malloc代码?我实际上想编写自己的malloc函数,它与原版函数略有不同.我知道我可以使用hooks等等,但我希望看到真正的代码.

c linux malloc free

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

了解"损坏的大小与prev_size"glibc错误

我已经为FDK-AAC实现了一个JNA桥.源代码可以在这里找到

在对我的代码进行基准测试时,我可以在同一输入上获得数百次成功运行,然后偶尔会发生C级崩溃,导致整个进程终止,从而导致生成核心转储:

看看核心转储,它看起来像这样:

#1  0x00007f3e92e00f5d in __GI_abort () at abort.c:90
#2  0x00007f3e92e4928d in __libc_message (action=action@entry=do_abort, fmt=fmt@entry=0x7f3e92f70528 "*** Error in `%s': %s: 0x%s ***\n") at ../sysdeps/posix/libc_fatal.c:181
#3  0x00007f3e92e5064a in malloc_printerr (action=<optimized out>, str=0x7f3e92f6cdee "corrupted size vs. prev_size", ptr=<optimized out>, ar_ptr=<optimized out>) at malloc.c:5426
#4  0x00007f3e92e5304a in _int_free (av=0x7f3de0000020, p=<optimized out>, have_lock=0) at malloc.c:4337
#5  0x00007f3e92e5744e in __GI___libc_free (mem=<optimized out>) at malloc.c:3145
#6  0x00007f3e113921e9 in FDKfree (ptr=0x7f3de009df60) at libSYS/src/genericStds.cpp:233
#7  0x00007f3e1130d7d3 in Free_AacEncoder (p=0x7f3de0115740) at libAACenc/src/aacenc_lib.cpp:407
#8  0x00007f3e1130fbb3 in aacEncClose …
Run Code Online (Sandbox Code Playgroud)

c++ malloc free glibc jna

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

free()如何影响堆上的内存地址?

这个赋值要求我们使用malloc()(命名var1var2)分配两个int类型变量,打印每个变量的地址(堆栈上指针的地址和堆上的地址),然后free()用来解除分配var1,再次打印地址,然后在堆中分配另一个空间var1并第三次打印地址.我相信教师试图告诉我们堆地址var1应该改变,但它始终保持不变......除非我free(var1)从代码中删除.教练做了类似的演示,但没有free()用来解除分配任何变量,所以我们从来没有看到它应该如何工作.

这是我的代码:

#include <stdio.h>
#include <stdlib.h>

void main()
{

int *var1 = (int*)malloc(sizeof(int)); 
*var1 = 1000;                   
int *var2 = (int*)malloc(sizeof(int)); 
*var2 = 2000;

printf("Addresses of var1\n");
printf("Pointer on stack: %p / Heap: %p\n\n", &var1, var1); 
printf("Addresses of var2\n");
printf("Pointer on stack: %p / Heap: %p\n\n", &var2, var2);

free(var1);

printf("AFTER DEALLOCATING var1 FROM THE HEAP\n");
printf("Addresses of var1\n");
printf("Pointer on stack: %p / …
Run Code Online (Sandbox Code Playgroud)

c malloc free heap-memory memory-address

14
推荐指数
2
解决办法
1069
查看次数