Я пишу некоторый код и получаю странную ошибку: мой цикл for не завершается, когда оператор условия становится ложным.Код выглядит следующим образом:
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';
}
}
При запуске этого кода с вводом примера (буфер Py_UNICODE * указывает на внутренний объект Python Unicode, созданный с помощью «примера»), я получаю следующий вывод:
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
...
Цикл не завершается до тех пор, пока не произойдет сбой интерпретатора Python, из которого выполняется код (я обертываю модуль ac для python).
Для отладки были введены printf.
Я компилирую это на Mac OSX 10.6, вот команды, которые я использую для компиляции:
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 ./
Как вы видите, я связываю в фреймворке, что я создаю оболочку Python для,Это не проблема, так как я могу нормально вызывать функции, использующие связанную инфраструктуру, только когда я вызываю функцию, которая использует вспомогательную функцию, показанную выше, я получаю проблему.
Я глупый здесь иделать что-то очень плохое или что-то не так с компилятором?Любая помощь будет высоко ценится!