LINUX.ORG.RU

malloc проблема


0

0

Странности творятся с malloc, программа вылетает в cигфолт при вызове malloc в одной из функций. Собирается нормально.


int newClient(int sock){

CLIENT *client;
client = malloc(sizeof(struct CLIENT)); //<--сигфолт

.....
.....

return 0;
}

CLIENT это структура, если разместить эти две строчки кода, например в функции main то память выделяется нормально. В чем может быть проблема?


Ответ на: комментарий от erDiZz

==14472== Memcheck, a memory error detector.
==14472== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==14472== Using LibVEX rev 1804, a library for dynamic binary translation.
==14472== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==14472== Using valgrind-3.3.0, a dynamic binary instrumentation framework.
==14472== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==14472== For more details, rerun with: -v
==14472==
==14472== Syscall param fcntl64(fd) contains uninitialised byte(s)
==14472== at 0x4000882: (within /lib/ld-2.7.so)
==14472== by 0x8049554: Listener (listener.c:109)
==14472== by 0x80497AD: main (main.c:41)
==14472==
==14472== Syscall param epoll_wait(events) contains uninitialised byte(s)
==14472== at 0x4000882: (within /lib/ld-2.7.so)
==14472== by 0x80497AD: main (main.c:41)
==14472==
==14472== Syscall param epoll_wait(events) points to unaddressable byte(s)
==14472== at 0x4000882: (within /lib/ld-2.7.so)
==14472== by 0x80497AD: main (main.c:41)
==14472== Address 0x41834c8 is 0 bytes inside a block of size 352 free'd
==14472== at 0x402364C: free (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==14472== by 0x40A1C11: fclose (in /lib/libc-2.7.so)
==14472== by 0x8049044: openConfig (config.c:200)
==14472== by 0x80497A8: main (main.c:30)
==14472==
==14472== Use of uninitialised value of size 4
==14472== at 0x80495D8: Listener (listener.c:126)
==14472== by 0x80497AD: main (main.c:41)
New connection on socket 6, !!!(эту строку выводит printf размещенный перед вызовом проблемной функции)
==14472==
==14472== Use of uninitialised value of size 4
==14472== at 0x804965D: Listener (listener.c:136)
==14472== by 0x80497AD: main (main.c:41)
==14472==
==14472== Use of uninitialised value of size 4
==14472== at 0x8049670: Listener (listener.c:136)
==14472== by 0x80497AD: main (main.c:41)

Ну и что тут можно увидеть?

T-34
() автор топика
Ответ на: комментарий от cvv

Дак он не вылетает!!! Тоесть с valgrindom все работает

T-34
() автор топика
Ответ на: комментарий от cvv

Даю весь:

==14594== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==14594== Using LibVEX rev 1804, a library for dynamic binary translation.
==14594== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==14594== Using valgrind-3.3.0, a dynamic binary instrumentation framework.
==14594== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==14594== For more details, rerun with: -v
==14594==
==14594== Syscall param fcntl64(fd) contains uninitialised byte(s)
==14594== at 0x4000882: (within /lib/ld-2.7.so)
==14594== by 0x8049530: Listener (listener.c:109)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== Syscall param epoll_wait(events) contains uninitialised byte(s)
==14594== at 0x4000882: (within /lib/ld-2.7.so)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== Syscall param epoll_wait(events) points to unaddressable byte(s)
==14594== at 0x4000882: (within /lib/ld-2.7.so)
==14594== by 0x8049795: main (main.c:41)
==14594== Address 0x41834c8 is 0 bytes inside a block of size 352 free'd
==14594== at 0x402364C: free (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==14594== by 0x40A1C11: fclose (in /lib/libc-2.7.so)
==14594== by 0x8049044: openConfig (config.c:200)
==14594== by 0x8049790: main (main.c:30)
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x80495B4: Listener (listener.c:126)
==14594== by 0x8049795: main (main.c:41)
New connection on socket 6,
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x8049639: Listener (listener.c:136)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x804964C: Listener (listener.c:136)
==14594== by 0x8049795: main (main.c:41)
Incomming data: , result = 0, event = 1
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x8049672: Listener (listener.c:137)
==14594== by 0x8049795: main (main.c:41)
Close socket 6
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x80496A5: Listener (listener.c:138)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== Syscall param epoll_ctl(event) contains uninitialised byte(s)
==14594== at 0x4000882: (within /lib/ld-2.7.so)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x80496D2: Listener (listener.c:139)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== Use of uninitialised value of size 4
==14594== at 0x80496EC: Listener (listener.c:140)
==14594== by 0x8049795: main (main.c:41)
==14594==
==14594== ERROR SUMMARY: 19 errors from 11 contexts (suppressed: 7 from 1)
==14594== malloc/free: in use at exit: 0 bytes in 0 blocks.
==14594== malloc/free: 23 allocs, 23 frees, 35,373 bytes allocated.
==14594== For counts of detected errors, rerun with: -v
==14594== All heap blocks were freed -- no leaks are possible.

T-34
() автор топика
Ответ на: комментарий от T-34

Вот этот кусок вроде подозрителен.
==14594== Address 0x41834c8 is 0 bytes inside a block of size 352 free'd
==14594== at 0x402364C: free (in /usr/lib/valgrind/x86-linux/vgpreload_memcheck.so)
==14594== by 0x40A1C11: fclose (in /lib/libc-2.7.so)
==14594== by 0x8049044: openConfig (config.c:200)
==14594== by 0x8049790: main (main.c:30)

Посмотри что у тебя происходит в окрестностях config.c:200

Vinick ★★
()
Ответ на: комментарий от T-34

Но похоже что там проблемы и создаются... Убрал эту функцию из кода, все необходимые значения вписал ручками. Все работает:

==14814== Memcheck, a memory error detector.
==14814== Copyright (C) 2002-2007, and GNU GPL'd, by Julian Seward et al.
==14814== Using LibVEX rev 1804, a library for dynamic binary translation.
==14814== Copyright (C) 2004-2007, and GNU GPL'd, by OpenWorks LLP.
==14814== Using valgrind-3.3.0, a dynamic binary instrumentation framework.
==14814== Copyright (C) 2000-2007, and GNU GPL'd, by Julian Seward et al.
==14814== For more details, rerun with: -v
==14814==
==14814== Syscall param fcntl64(fd) contains uninitialised byte(s)
==14814== at 0x4000882: (within /lib/ld-2.7.so)
==14814== by 0x8049370: Listener (listener.c:111)
==14814== by 0x80495D0: main (main.c:41)
==14814==
==14814== Syscall param epoll_wait(events) contains uninitialised byte(s)
==14814== at 0x4000882: (within /lib/ld-2.7.so)
==14814== by 0x80495D0: main (main.c:41)
==14814==
==14814== ERROR SUMMARY: 2 errors from 2 contexts (suppressed: 7 from 1)
==14814== malloc/free: in use at exit: 0 bytes in 0 blocks.
==14814== malloc/free: 17 allocs, 17 frees, 26,305 bytes allocated.
==14814== For counts of detected errors, rerun with: -v
==14814== All heap blocks were freed -- no leaks are possible.


Что за две ошибки выдает?

T-34
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.