pthread, проблемы с памятью
От: Azazar  
Дата: 18.05.06 12:38
Оценка:
Начал писать софт без тредов, потом решил переделать с использованием тредов. И сразу возникли проблемы с выделением/освобожением памяти.

Я пришел к выводу, что надо пользоваться reentrant аналогами стандартных функций.

Только возникли вопросы:
Этим функциям надо передавать указатель на REENT , а вот инфы, как его инициализировать я так нигде и не нашел. Подскажите пожалуйста, что с ним делать.

И стоит ли вообще смотреть в сторону стандартных reentrant функций?

Проблемы выглядят примерно так:
---
кусок 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)
---
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.