0

Cにいくつか問題があります。これが私のコードです。

// First line works, second line does not! 
char outbuf[1024];
// char *outbuf = (char *) malloc(1024);  // char is always 1

このoutbufをPK11_CipherOp()、NSSライブラリで宣言されていると呼ばれるメソッドに渡します。このメソッドのドキュメントはここにあります。outbufパラメーターにaが必要であることがわかりchar *ます。

最初の行が確実に機能し、2番目の行が機能しない理由がわかりません。

完全なコードを表示するには、ファイルソースを参照してください

ありがとう、

ハミルトン

4

2 に答える 2

3

あなたの問題は、の宣言が欠落しているようですmalloc-あなたは含まれていません<stdlib.h>

これは、コンパイラが関数がを返すことを想定しておりint、それが明示的ににキャストされていることを意味します(unsigned char *)sizeof(int) != sizeof(void *)x86-64のように、がポインタ値を壊してしまうプラットフォームを使用している場合。

これは、Cで(C ++とは異なり)の結果をキャストしてはならないmalloc()理由を完全に示しています-そうすることは不要であり、この正確なバグをあなたから隠します。また、コンパイラの警告をオンにする必要がある理由も示しています。

修正は#include <stdlib.h>、そこにいる間にキャストを削除するmalloc()ことです。

補遺:

あなたの他の問題はあなたがに渡しsizeof(outbuf)ているということですPK11_CipherOp()。これは、が配列のout_buf_size場合は正しい(に等しい)が、がポインタの場合は正しくない(ポインタ自体のサイズ)。outbufoutbuf

それぞれsizeof(outbuf)out_buf_sizeに置き換えれば、うまくいくはずです(後で別のものもあります)...

于 2009-12-04T04:39:23.350 に答える
0

問題が見つかりました。sizeof(outbuf)パラメータの1つとして使用していたことがわかりました。アウトバフがスタックで宣言されている場合、char outbuf[1024];これは1024を返します。ただし、アウトバフがヒープ上にある場合、アウトバフchar * outbuf = malloc(1024);のサイズは4であるため、このパラメーターは、アウトバフで使用可能なスペースの量を関数に通知したため、関数は次のように考えました。 4バイトのスペースしかないこと。何かをするのに16が必要なので、何も実行せずに戻ってきました。

于 2009-12-04T21:59:39.140 に答える