Python / SWIG: объект GC уже отслеживается при попытке использовать функцию C для разыменования указателя из SWIG - PullRequest
2 голосов
/ 20 июля 2011

У меня проблема с WORD (2-байтовые целые числа без знака).Вот команды, которые я обычно запускаю

import mySimLib
mySimLib.init()
strPtr = mySimLib.strInit( 200 )    #where 200 is the number of characters I want in the
                           #string. strInit returns a malloc'd pointer
wPtr = mySimLib.wordInit ()         # where wordInit returns a malloc'd pointer to a WORD.
mySimLib.Write ("Title", "Data", 4) # 4 is the number of bytes required to store data
mySimLib.Search ("Title", strPtr, 200, wPtr) #Search finds the record with same title,
      #copies the data into strPtr up to the number of bytes in the record - as long as
      #the number of bytes in the strPtr is greater. 

mySimLib.printWord (wPtr) #Since I cannot use python to dereference word pointers, I call a C function to print it out. 

В этот момент моя программа падает.Выдает исключение (нарушение чтения) или какую-либо отслеживаемую ошибку объекта GC.Дело в том, что у меня есть функция строковой печати, которая никогда не перестает работать, когда я ее печатаю.Когда я пытаюсь получить слово для печати, я получаю ошибки.

Это моя функция инициации wordptr:

unsigned int * wordInit () {
    unsigned int * d = malloc ( sizeof ( unsigned int ) );
    *d = 0;
    return d;
}

Это моя функция печати:

void wordPrint (unsigned int * d){
    printf ("\nWptr: %d",*d);
}

Я понятия не имею, что я делаю здесь неправильно, но эти сбои очень беспорядочные и раздражающие.

...