Sto scrivendo del codice e sto ricevendo uno strano errore: il mio ciclo for non sembra uscire quando l'istruzione della condizione diventa falsa. Il codice è il seguente:Per il ciclo che non termina in c
static void wstrcpy_from_Py_UNICODE(Py_UNICODE *inBuf, Py_ssize_t strLength, wchar_t **outBuf)
{
if (strLength == 0) *outBuf = NULL;
else
{
Py_ssize_t i;
wprintf(L"String Length: %d\n", strLength);
*outBuf = (wchar_t *)malloc (sizeof (wchar_t) * (strLength +1));
for (i=0; i < strLength; i++)
{
wprintf("i:%d, strLength:%d\n", i, strLength);
(*outBuf)[i] = (wchar_t)(inBuf[i]);
wprintf(L"i < strLength: %d\n\n", i < strLength);
}
/* Make sure new string is zero terminated */
(*outBuf)[i] = L'\0';
}
}
Quando si esegue questo codice con un ingresso esempio, (il Py_UNICODE * punti tampone all'oggetto interno unicode pitone fornito con u "esempio") ottengo il seguente output:
String Length: 7
i:0, strLength: 7
i < strLength: 1
i:1, strLength: 7
i < strLength: 1
i:2, strLength: 7
i < strLength: 1
i:3, strLength: 7
i < strLength: 1
i:4, strLength: 7
i < strLength: 1
i:5, strLength: 7
i < strLength: 1
i:6, strLength: 7
i < strLength: 1
i:7, strLength: 7
i < strLength: 1
i:8, strLength: 7
i < strLength: 1
...
Il ciclo non si chiude fino a quando non si verifica un arresto anomalo dell'interprete python dal codice (I am wrapping ac module for python).
I file di stampa sono stati inseriti per il debug.
sto compilando questo su Mac OSX 10.6, qui ci sono i comandi che sto usando per compilare:
gcc -c source.c -I/usr/include/python2.6 -I/usr/lib/python2.6
ld -bundle -flat_namespace -undefined suppress -o out.so source.o -F./ -framework some_framework -macosx_version_min 10.6 -rpath ./
Come potete vedere stanno collegando nel quadro che sto facendo l'involucro Python per. Questo non è un problema in quanto posso chiamare le funzioni bene che usano il framework collegato, proprio quando chiamo la funzione che usa la funzione helper mostrata sopra, ottengo il problema.
Sono stupido qui e sto facendo qualcosa di molto sbagliato o qualcosa di sbagliato nel compilatore? Qualsiasi aiuto sarebbe molto apprezzato!
cosa è sizeof (Py_ssize_t)? – hari
Insetto davvero strano! Penso che darei un'occhiata al codice assembly per vedere cosa ha fatto al loop. Penso che il compilatore abbia rovinato qualcosa. Forse la definizione del tipo di Py_ssize_t confonde in qualche modo? –