[英]Array of struct C language
在我的程序中,我必須創建結構,就我而言,我有結構處理器,這是我的示例:
struct Processor{
int id;
struct Task **task;
}
在主要我創建一組處理器(例如 2 個處理器),我必須使用這個函數在每個處理器中添加任務struct Processor * create_processor(int id, struct Task **task );
這是函數:
struct Processor * create_processor(int id, struct Task **task){
struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
pr->id = id;
//how to initialize Task set??
return pr;
}
現在如何在函數中初始化任務集? 以及如何使用任務集的元素? 我使用了processor[1]->task[1]->id = 5;
但它返回 ERROR Segmentation fault (core dumped)
請幫忙
當你做
struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
您現在已經初始化了一個空的Processor
結構。 由於結構的task
成員是一個指針(實際上是一個雙指針),所以你在新初始化的Processor
所擁有的一切等價於: struct Processor { id: 0, task: 0 }
,即它只包含一個空指針task
成員。 這可能就是您收到Segmentation fault
,這是您的程序訪問未初始化內存時發生的錯誤類型。
您還必須為每個處理器必須擁有的許多任務分配一個Task*
(任務指針)數組。 例如
pr.task = (struct Task **) malloc(sizeof(struct Task *) * N_TASKS); // pr.task should probably be called pr.tasks??
那么您還需要為每個實際任務初始化內存:
for (int idx = 0; idx < N_TASKS; idx++) {
pr.task[idx] = (struct Task *) malloc(sizeof(struct Task));
}
等等你想要初始化的每個Processor
。
也許這會有所幫助。 我想您在調用函數之前為任務分配內存。 這里有 10 個任務,我創建了一個包含 3 個任務的處理器:
struct Processor{
int id;
struct Task **task;
};
struct Task{ int id; int WCET;};
struct Processor * create_processor(int id, struct Task **task){
struct Processor * pr = (struct Processor *) (malloc(sizeof(struct Processor)));
pr->id = id;
pr->task = task;
return pr;
}
int main() {
struct Task taskArray[10]; /* memory for 10 tasks */
struct Task * taskPtrArray[3]; /* pointers to 3 tasks */
taskPtrArray[0] = &taskArray[2]; /* pointer to task 2 */
taskPtrArray[1] = &taskArray[6]; /* pointer to task 6 */
taskPtrArray[2] = &taskArray[9]; /* pointer to task 9 */
struct Processor * p1 = create_processor(1, taskPtrArray);
printf("p1->id = %d \n", p1->id);
p1->task[2]->WCET = 999;
printf("p1->task[2]->WCET = %d \n", taskArray[9].WCET);
}
輸出是:
p1->id = 1
p1->任務[2]->WCET = 999
正如“一些程序員老兄”所說。 功能分配任務:
pr->task = task;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.