私はいくつかのコードを書いています。私は奇妙なエラーが発生しています。私のforループは、条件文が偽になったときに終了しないようです。コードは以下の通りである:forループは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';
}
}
例えば入力、(U「例」で作られた内部のUnicode PythonオブジェクトへのPy_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インタプリタ(Python用のacモジュールをラップしています)がクラッシュするまで、ループは終了しません。
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ラッパーを作っていますフレームワークにリンクしています見ることができるように。上記のヘルパー関数を使用する関数を呼び出すときに、リンクされたフレームワークを使用する関数をうまく呼び出すことができれば問題はありません。
私はここで愚かで、何か非常に基本的なやり方を間違っているか、コンパイラに何か間違っていますか?どんな助けでも大歓迎です!
sizeof(Py_ssize_t)とは何ですか? – hari
本当に奇妙なバグ!ループに何があったのかを知るためにアセンブリコードを覗いてみたいと思います。私はコンパイラが何かをねじ込んだと思う。多分Py_ssize_tの型定義は何とか混乱しているでしょうか? –