-2

私はポインターと構造体を使用して C プロジェクトを作成していますが、現在この問題に直面しています: 構造体があります

struct Customer
{
    char Name[80];
    char Address[40];
    int ID;
    int Pnumber;
};

*line_count* 個のメンバーを持つこの構造体の動的配列を作成します。私はこのコードを使用しますが、プログラムがクラッシュします:

struct Customer* ph;
ph = (struct Customer*)malloc(line_count * sizeof(struct Customer));

私は何を間違っていますか?

4

2 に答える 2

1

良い:

struct Customer* ph;
ph = (struct Customer*)malloc(line_count * sizeof(struct Customer));

より良い:

struct Customer* ph =
  (struct Customer*)malloc(line_count * sizeof(struct Customer));
if (!ph) {
  <<error handling>>
  ...

しかし、率直に言って、問題はコードの別の場所にあるようです。

malloc() に根本的な問題はありません。

「line_count」が偽物である可能性があり、「malloc()」が失敗している可能性があります (この場合、「NULL」を返す必要があります) ... または、構造体に正しくアクセスしていないか、正しく初期化できていない可能性があります。

実際のクラッシュのスタック トレースバックは非常に役立ちます。

于 2012-05-29T20:42:47.927 に答える
0

表示しているコードは、呼び出しph == NULL後に逆参照した場合にのみクラッシュする可能性があります。malloc

mallocマニュアルページから:

malloc() および calloc() 関数は、任意の種類の変数に対して適切にアラインされた、割り当てられたメモリへのポインタを返します。エラーの場合、これらの関数は NULL を返します。サイズが 0 の malloc() の呼び出しが成功した場合、または nmemb または size が 0 の calloc() の呼び出しが成功した場合も、NULL が返されることがあります。

于 2012-05-29T20:38:46.167 に答える