5

C:

大きな配列を含む構造体を使用しようとしていますが、宣言中にスタック オーバーフロー エラーが発生しました。スタックに十分なメモリがないため、ヒープを使用する必要があると思います (コードが他のユーザーに使用されるため、スタックのメモリ サイズを変更したくありません)。誰かがそれを簡単に行う方法を教えてもらえますか? または、構造体以外のものを使用する必要がありますか?

私のコード - definitions.h:

#define a_large_number 100000

struct std_calibrations{
    double E[a_large_number];
};

私のコード - main.c:

int main(int argc, char *argv[])
{
    /* ...
    */

    // Stack overflows here:
    struct std_calibrations calibration;

    /* ...
    */

    return (0);
} 

ご協力ありがとうございました!

4

2 に答える 2

4

メンバーEをそのためのdouble*メモリmalloc()に変更します。

struct std_calibrations calibration;
calibration->E = malloc(sizeof(*calibration->E) * a_large_number);

free(calibration->E);不要になったときに覚えておいてください。struct std_calibrations必要に応じて を拡張して に要素の数を含めることができるEため、 のユーザーは必要な要素の数をstruct std_calibrations決定できます。

于 2013-05-21T14:38:38.457 に答える