【发布时间】:2015-06-11 16:10:16
【问题描述】:
我面临与 malloc 和 free 相关的关键问题。
'A' 线程使用 malloc 分配内存。 和“A”线程完成。
“B”线程从分配的“A”线程中释放内存,但有时程序已死。
所以我打印了内存地址但同样的 malloc 地址和空闲地址。
如何调试这种情况?
请给我建议。
这样的示例代码
malloc 和 free 之间的 dlmalloc 元数据也相同。 如果不使用线程,也会出现同样的问题。
嗯...分配的内存内容修改了安全世界的操作系统。
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);
}
【问题讨论】:
-
使用 gdb?请发布显示错误的代码的最小工作示例,我们很乐意查看!
-
失败时你能提供任何输出吗?你有违规代码的代码 sn-ps 吗?
-
你需要在你的编程中非常清楚谁有责任删除内存以及何时发生。您必须安排您的程序,以便保证正确的操作顺序。大部分时间只是猜测并希望能做对是灾难的根源。
标签: c linux memory malloc free