C中的进程结构内存分配

时间:2011-11-12 22:53:46

标签: c arrays malloc structure

编辑:

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 个答案:

答案 0 :(得分:5)

为什么需要分配内存,声明

  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 :(得分:1)

似乎你需要一个指针数组到PRO:

PRO *Array[100];

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

我不知道enteringProcess是什么,所以我不能发表意见。只是除了newPro的返回之外你不应该向malloc分配任何内容,否则你将泄漏新对象。

答案 2 :(得分:0)

我猜测将进程指向内存中的无效位置。

newPro = enteringProcess

是你的问题。