簡體   English   中英

C語言struct數組

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM