Cでのプロセス構造メモリ割り当て

編集:

Typedef struct SPro{
     int arrivalTime;
     char processName[15];
     int burst;
} PRO;

私はPROタイプの配列を持っています

PRO Array[100];
PRO enteringProcess;
//initialize entering process

新しいプロセスを作成し、mallocを使ってそのプロセスにメモリを割り当てる必要があります。そして、配列からmallocが返すメモリチャンクにポインタを向けます。

PRO *newPro = (PRO *) malloc (sizeof(PRO));
newPro = enteringProcess;
ProArray[0] = *newPro;

実行時にプログラムがクラッシュしてから間違ったことをしているようです。 どんな助け?ありがとう!

0
entryProcessはどのように宣言されていますか?それはまたポインタですか?
追加された 著者 Tudor,
あなたが誤ってコピーされたコードではなくQでコンパイルされた実際のコードを投稿した方がよいでしょう。クリップボードを使用してください。
追加された 著者 David Heffernan,
プログラムはどこでクラッシュするのですか?上のコードでは? PROの定義方法申し訳ありませんが、私にとっては上記のスニペットにはあまり情報が含まれていません。
追加された 著者 Werner Henze,
私はそう失われ、編集後にも混乱している:)眠る時間...
追加された 著者 Jarno Argillander,
私はもう少しあなたのコードを見たり、少なくともあなたがプログラムがクラッシュすると思う場所を知ることは有用であると思います。しかし、私が見るところでは、すでに "newPro = enteringProcess;"に問題があります。ステートメント。この "入力プロセス"変数は何ですか?次のステートメントでは、あなたは本当に "enterProcess"である "newPro"を逆参照しているので。さらに、 "ProArray"は "PRO"の配列ではなく、 "PRO *"の配列であり、あなたが本当に望むものと思われる。もう一度、詳細を歓迎します。
追加された 著者 Mr_Hic-up,

3 答え

なぜあなたはメモリを宣言する必要がありますか?

  PRO Array[100];

すでにメモリを割り当てられています。つまり、あなたのPROの定義は次のようなものです。

  typedef struct {
     .....
  } PRO;

あなたのコードをレビューします。

// Declare a new pointer, and assign malloced memory
PRO *newPro = (PRO *) malloc (sizeof(PRO));

// override the newly declared pointer with something else, memory is now lost
newPro = enteringProcess;

// Take the content of 'enteringProcess' as assigned to the pointer, 
// and copy the content across to the memory already allocated in ProArray[0] 
ProArray[0] = *newPro;

おそらく、代わりにこのようなものが欲しいでしょう。

  typedef struct {
     ...
  } PRO;

  PRO *Array[100];//Decalre an array of 100 pointers;

  PRO *newPro = (PRO *) malloc (sizeof(PRO));
  *newPro = enteringProcess; //copy the content across to alloced memory
  ProArray[0] = newpro;//Keep track of the pointers
5
追加された

PROにポインタの配列が必要なようです:

PRO *Array[100];

PRO *newPro = (PRO *) malloc (sizeof(PRO));
/* ... */
Array[0] = newPro;

私は enteringProcess が何であるかわからないので、私は意見を述べることはできません。 malloc 以外の newPro には何も割り当てないでください。そうしないと、新しいオブジェクトがリークします。

1
追加された
なぜポインターの配列ですか?代入Array [0] = * newProは、変数Array [0]のnewProが指すアドレスの値をコピーします。この割り当ては正しいです。
追加された 著者 Tudor,
私は同意する、コードはやや紛らわしい。私の答えで言ったように、私はnewProポインタのポイントを見ません。
追加された 著者 Tudor,
構文的には正解ですが、無意味です。代入のソースとしてだけ使用するために動的オブジェクトを作成しますか?これが必要な場合は、自動(別名ローカル)変数を使用する必要があります。あるいは、オブジェクトを配列に直接初期化することもできます。私が推測したのは、 malloc を使用していたのは、オブジェクトが動的である必要があったからです。
追加された 著者 rodrigo,

私は、メモリ内の無効な場所への入力ポイントを推測しています。

newPro = enteringProcess

あなたの問題です。

0
追加された