Azazar
Зарегистрирован: 15.02.2004 Сообщения: 3
|
Добавлено: Чт Май 18 2006 14:49 Заголовок сообщения: gnu pthread, malloc vs _malloc_r и прочие reentrant функции |
|
|
Начал писать софт без тредов, потом решил переделать с использованием тредов. И сразу возникли проблемы с выделением/освобожением памяти.
Я пришел к выводу, что надо пользоваться reentrant аналогами стандартных функций.
Только возник 1 вопрос:
Этим функциям надо передавать указатель на REENT , а вот инфы, как его инициализировать я так нигде и не нашел. Подскажите пожалуйста, что с ним делать.
Проблемы выглядят примерно так:
---
кусок lcurlutils.c
27 free(mem->data);
20 }
20
30 void MemoryStruct_empty(MemoryStruct *mem)
31 {
32 MemoryStruct_free(mem);
33 MemoryStruct_init(mem);
34 }
35
36 int MemoryStruct_append(MemoryStruct *mem,void *data,size_t length)
37 {
38 if (length == 0) {
39 return 0;
40 } else if (mem->size == 0) {
41 mem->data = malloc(length);
42
43 if (mem->data == NULL)
44 return 0;
45
46 mem->size = length;
47 memcpy(mem->data,data,length);
48 } else {
49 register char *n;
50
51 n=realloc(mem->data, mem->size + length);
кусок лога MEMWATCH:
relink: <107999> lcurlutils.c(51) attempting to repair MW-0x409dd870...
relink: successful, no allocations lost
relink: <121936> lcurlutils.c(51) attempting to repair MW-0x92a8dd8...
relink: successful, size information lost for MW-0x92a8dd8
internal: <121938> lcurlutils.c(51), checksum for MW-0x92a8dd8 is incorrect
overflow: <121938> lcurlutils.c(51), 0 bytes alloc'd at <121933> <relinked>(51)
relink: <149459> lcurlutils.c(51) attempting to repair MW-0x40acebc0...
relink: successful, size information lost for MW-0x40acebc0
internal: <149486> lcurlutils.c(51), mwIsOwned fails for MW-0x40acebc0
realloc: <149486> lcurlutils.c(51), 0x40acebe4 was freed from lcurlutils.c(51)
internal: <149499> lcurlutils.c(27), checksum for MW-0x40acebc0 is incorrect
overflow: <149499> lcurlutils.c(27), 0 bytes alloc'd at <149456> <relinked>(51)
relink: <387179> lcurlutils.c(51) attempting to repair MW-0xaf5f0b8...
relink: MW-0xaf5f0b8 is the head (first) allocation
relink: successful, size information lost for MW-0xaf5f0b8
internal: <387215> lcurlutils.c(51), checksum for MW-0xaf5f0b8 is incorrect
overflow: <387215> lcurlutils.c(51), 0 bytes alloc'd at <387175> <relinked>(51)
relink: <596150> lcurlutils.c(51) attempting to repair MW-0x435c11e8...
relink: successful, size information lost for MW-0x435c11e8
internal: <596165> lcurlutils.c(51), checksum for MW-0x435c11e8 is incorrect
overflow: <596165> lcurlutils.c(51), 0 bytes alloc'd at <596147> <relinked>(51)
internal: <1325645> lcurlutils.c(51), checksum for MW-0x470241c0 is incorrect
overflow: <1325647> lcurlutils.c(51), 0 bytes alloc'd at <1325628> <relinked>(51)
--- |
|