распределение памяти по структуре процесса в C - PullRequest
0 голосов
/ 13 ноября 2011

РЕДАКТИРОВАТЬ:

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;

Кажется, что я делаю что-то не так, так как моя программа падает во время выполнения.Любая помощь?спасибо!

Ответы [ 3 ]

5 голосов
/ 13 ноября 2011

Зачем вам нужно выделять память, объявление

  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
1 голос
/ 13 ноября 2011

Кажется, вам нужен массив из указателей на PRO:

PRO *Array[100];

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

Я не знаю, что это за enteringProcess, поэтому я не могу высказать свое мнение. Просто вам не следует присваивать newPro ничего, кроме возврата malloc, иначе вы пропустите новый объект.

0 голосов
/ 13 ноября 2011

Я полагаю, что inputProcess указывает на недопустимое место в памяти.

newPro = enteringProcess

- ваша проблема.

...