我面临与malloc和免费相关的关键问题。
' A'线程使用malloc分配内存。 和' A'线程完成。
' B'来自已分配' A'的无线内存线程,但有时候程序已经死了。
所以我打印了内存地址,但是相同的malloc地址和空闲地址。
如何调试这种情况?
请告诉我。像这样的示例代码
和dlmalloc元数据在malloc和free之间也相同。 如果没有使用线程,也会出现相同的问题。
嗯...分配内存内容修改了安全世界操作系统。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);
}
答案 0 :(得分:2)
在多线程中,除非已同步,否则无法保证线程的执行顺序。在您的情况下,在另一个线程分配内存之前,线程可能会取消分配内存。
代码段有助于进一步检查问题。
答案 1 :(得分:0)
首先,在MallocFunction
中,您要为整数变量分配地址。根据编译代码的机器的地址长度,地址可能会被切断(32位对64位)。
其次,您使用局部变量(mem
)来保存分配的地址。函数完成后,此变量将失去其范围。我很好奇你的GetMallocMemory
函数是什么样的。
首先尝试解决这些问题。