gpt4 book ai didi

c - 为什么程序死于使用 malloc 和 free(相同地址)

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:15:32 26 4
gpt4 key购买 nike

我面临与 malloc 和 free 相关的严重问题。

“A”线程使用 malloc 分配内存。和“A”线程加工。

“B”线程从分配的“A”线程释放内存,但有时程序已死。

所以我打印了内存地址,但打印了相同的 malloc 地址和空闲地址。

如何调试这种情况?

请多多指教。

示例代码如下

和 dlmalloc 元数据在 malloc 和 free 之间也相同。如果不使用线程,也会出现同样的问题。

umm...分配的内存内容修改了安全世界操作系统。

Polling function
{
poll((struct pollfd *)&Event, 2 10000);
read(fd, &index, sizeof(uint));
pthread_create(&thread[index], NULL, SomeFunction, (void *)index);
pthread_detach(thread[index]);
}


void SomeFunction(uint *arg)
{
uint command;
command = (uint)arg;

switch(command) {
case malloc:
MallocFunction();
break;
case free:
FreeFunction();
break;
}
Ioctl(fd, .....);
}


MallocFunction()
{
uint mem;

mem = malloc(uint);
}

FreeFunction()
{
uint mem;

GetMallocMemory(&mem);

free((char *)mem);
}

最佳答案

在多线程中,你不能保证线程的执行顺序,除非它们是同步的。在您的情况下,线程有可能在另一个线程分配内存之前取消分配内存。

代码片段将有助于进一步检查问题。

关于c - 为什么程序死于使用 malloc 和 free(相同地址),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30786027/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com