为什么程序死了使用malloc和free(相同的地址)

时间:2015-06-11 16:10:16

标签: c linux memory malloc free

我面临与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);
}

2 个答案:

答案 0 :(得分:2)

在多线程中,除非已同步,否则无法保证线程的执行顺序。在您的情况下,在另一个线程分配内存之前,线程可能会取消分配内存。

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

答案 1 :(得分:0)

首先,在MallocFunction中,您要为整数变量分配地址。根据编译代码的机器的地址长度,地址可能会被切断(32位对64位)。

其次,您使用局部变量(mem)来保存分配的地址。函数完成后,此变量将失去其范围。我很好奇你的GetMallocMemory函数是什么样的。

首先尝试解决这些问题。