Сообщение об ошибке довольно ясно: вы пытаетесь нарисовать QWidget
(который в PyQt4.5
наследует QPaintDevice
и QObject
), прежде чем вы создадите экземпляр QApplication
. Но ваш код слишком велик для чтения по строкам. Попытайтесь изолировать ошибку, создавая небольшое приложение и добавляя функциональность шаг за шагом. Или используйте отладчик (предполагается, что IDE, такие как Eclipse
+ PyDev
, могут отлаживать ваше приложение). Или предоставим нам небольшой, самодостаточный пример проблемы.
__malloc_hook
вызывается сразу после ввода __libc_malloc
в здесь :
void *
__libc_malloc (size_t bytes)
{
mstate ar_ptr;
void *victim;
void *(*hook) (size_t, const void *)
= atomic_forced_read (__malloc_hook);
if (__builtin_expect (hook != NULL, 0))
return (*hook)(bytes, RETURN_ADDRESS (0));
, в то время как блокировка потока реализована в __libc_malloc
20 строками ниже, в здесь :
if (SINGLE_THREAD_P)
{
victim = _int_malloc (&main_arena, bytes);
assert (!victim || chunk_is_mmapped (mem2chunk (victim)) ||
&main_arena == arena_for_chunk (mem2chunk (victim)));
return victim;
}
arena_get (ar_ptr, bytes);
arena_get
строит арену для нитки или выбирает арену и блокирует арену, объявленную здесь .
Таким образом, при разработке собственного __malloc_hook
разработчик несет ответственность за все, включая блокировку потоков (при необходимости).
Вы не должны использовать их в любом случае; они устарели. См. Раздел «Примечания» любой недавней копии the malloc_hook(3) man page
:
Использование этих функций ловушек небезопасно в многопоточных программах, и теперь они устарели. Программисты должны вместо этого опередить вызовы соответствующих функций, определив и экспортировав такие функции, как «malloc» и «free».
blockquote>