3

Cプログラムを読み取る単純なpgmファイルを作成しようとしています。シンプルな構造を作成する必要がありました。

typedef struct pgmImage {
   int R; //rows
   int C; //collumns
   int G; //grey scale
   int **pix;  // array of pixels
}Image;

ここで、空の画像構造を初期化する必要があります。他の関数で *.pgm ファイルに基づいてすべての変数を設定する必要があります。常に「メモリを読み取れません」と「初期化されたローカル変数xが使用されています」というメッセージが表示されます。私は単純にやろうとしました:

画像 *x=0;

ただし、読み取り関数が R、C、G 値を設定しようとすると、プログラムがクラッシュします。

4

3 に答える 3

1
Image x = {0}

画像要素の静的メモリ割り当てx

また

Image *x = calloc(1,(sizeof(Image));

これは、画像の動的メモリ割り当てでありx、割り当てられたメモリへのポインタです

callocemory を割り当て、すべてのメモリを 0 に初期化するため、構造体のポインターは体系的に NULL に初期化されます。

于 2012-11-10T17:34:37.700 に答える
1

Image へのポインターが必要な場合は、このように初期化する必要があります。

Image *x = NULL;

次のようなイメージ (x) キャンプへのアクセス:

x-> C = 0;
x-> ...
x->pix = NULL;

ただし、最初にイメージにメモリを割り当てる必要があります。

x = (Image*) malloc(sizeof(Image));
于 2012-11-10T17:37:48.203 に答える
0

ポインターを使用する場合は、構造体を保持するのに十分なメモリを割り当てる必要があります。ただし、null ポインターを逆参照しようとしています。これにより、未定義の動作が発生します。

#include <stdlib.h>
Image *x = malloc(sizeof *x);

そして、メンバーを初期化できます。注意:callocここでの使用は移植性がありません。これは、null ポインターがすべてのビットがゼロのメモリ表現を持つことが保証されていないためです。

とにかく、ここではポインターを使用する必要はないようです。

#include <stddef.h>
Image x = { 0, 0, 0, NULL };
于 2012-11-10T17:34:20.537 に答える