1

最初のコンパイルの前に、オープン ソース プロジェクトの関数のエラーをキャッチするために書いた単体テスト プログラムがあります。テストする必要があるすべての関数は、構造体 (この場合bn_polyは ) へのポインターを返しますが、変数はポインターではありません。この問題にはもっと簡単な解決策があるに違いないことはわかっていますが、少しグーグルで調べた後、何も思いつきませんでした。これが私が現在行っていることです

/* only relevant part of code */
struct *bn_poly poly_summ;
unsigned i
poly_summ = (struct bn_poly*)bu_malloc(sizeof(struct bn_poly),"sum");
/* test multiplication and begin checking data */
*poly_summ = bn_poly_mul(&poly_summ,poly_eqn,poly_mul);
/* bn_poly returns a pointer to bn_poly, so i have to declare
 * a temporary pointer to find the value. Is this the only way
 * or is there a type cast method i am missing?
 */

私ができるようにしたいこと:

struct bn_poly poly_summ;
poly_summ = (somethingToConvertReturnVal)bn_poly_mul(&poly_summ,poly_eqn,poly_mul);
/* no memory allocation needed! */
4

1 に答える 1

1

あなたの質問が何であるかについて少し混乱していますが、「キャスト」ポインターについて私が知っていることは次のとおりです。

  • &シンボルは参照シンボルであるため 、&xx のアドレス、または x を指すポインターが得られます。

  • シンボルは*参照シンボルであるため、xがポインターであると仮定すると*x、値がx指す値が得られます

あなたの場合、私はあなたが望むと思います

struct bn_poly poly_summ;
poly_summ = *(bn_poly_mul(/*params*/));

追加のメモとして、見た目では、bn_poly_mulすでに構造体を割り当ててヒープに配置しているように見えます。割り当てる必要さえありません。実際、割り当てるとメモリリークが発生します


bn_poly_mulまた、 isの最初のパラメーターが&poly_summ少し不快なので、確実に知るには関数を確認する必要があります

于 2012-12-22T04:56:43.427 に答える