1

C で構造体を動的に割り当てようとすると問題が発生します。

typedef struct
{
    uint8_t wifiSSID[30];
    uint8_t wifiPassword[20];
}
tWifiPair;


typedef struct
{
    tWifiPair *wifiNetworks; // this needs to become an array with 2 elements
    // if I do the above like this tWifiPair wifiNetworks[1] - all works fine
}
tEEPROMSettings;

tEEPROMSettings gEEPROMSettings;

int main()
{
    gEEPROMSettings.wifiNetworks = (tWifiPair *)calloc(2, sizeof(tWifiPair));

    // .... writing to gEEPROMSettings.wifiNetworks[0].wifiSSID crashes the program, unfortunately I can't see the error, but the compiler doesn't throw any errors/warnings
}

この tWifiPair *wifiNetworks が静的に実行される場合 (tWifiPair wifiNetworks[1]) は正常に動作しますが、プログラムの実行中に動的に実行し、場合によっては変更する必要があります。

これは組み込みプラットフォームで実行されています - ARM tm4c1294ncpdt、コンパイラは CCS6 です。

エラーの場所を教えてもらえますか? ありがとう!

4

1 に答える 1

4

の戻り値をチェックして、calloc成功したことを確認する必要があります。

成功すると、関数によって割り当てられたメモリ ブロックへのポインター。このポインターの型は常に void* であり、逆参照可能にするために目的の型のデータ ポインターにキャストできます。関数が要求されたメモリ ブロックの割り当てに失敗した場合は、null ポインターが返されます。

この参考書から

が失敗した場合calloc、それは別の問題です。

他の人が読んでいるコメントからの情報で更新:

これは組み込みシステムのようで、小さなヒープが構成されている可能性があります。callocを返すNULLので、割り当ては失敗しています。コンパイラ/リンカーによっては、リンカー スクリプト、スキャッター ファイル、またはプロジェクト オプションを調整して、ヒープ サイズを変更する必要がある場合があります。

于 2014-06-18T21:19:44.297 に答える