您好我實現了一個鏈表,我有麻煩更新我創建的結構過程的變量。下面是示例代碼:C變量覆蓋值
typedef struct Process {
int pid;
char name[256];
int prior;
int state;
int start_time;
} Process;
typedef struct Node {
Process *value;
struct Node *next;
} Node;
Node *create_node(){
Node *temp = malloc(sizeof(Node));
temp->value = NULL;
temp->next = NULL;
return temp;
}
void append(Node *head, Node *nodo){
Node *current = head;
while (current->next != NULL){
current = current->next;
}
current->next = nodo;
}
void add_attr(char *string, Process *procc){
char *pch;
pch = strtok(string, " ");
for (int i = 0; i < 3; i++){
if (i == 0){
strcpy(procc->name,pch);
}
else if(i == 1){
int aux = atoi(pch);
procc->prior = aux;
}
else{
int aux1 = atoi(pch);
procc->start_time = aux1;
}
pch = strtok(NULL, " ");
}
int main(int argc, char * argv []) {
FILE *fp;
int pid = 0;
char *line = NULL;
size_t len = 0;
ssize_t read;
fp = fopen(argv[1],"r");
Node *process_list = create_node();
Process *proc = malloc(sizeof(Process));
proc->pid = pid;
proc->state = 0;
process_list->value = proc;
pid += 1 ;
while ((read = getline(&line, &len, fp)) != -1) {
printf("%s\n",line);
add_attr(line, proc);
printf("---------------------------------------------------------\n");
printf("pointer proc memory dir = %p\n", proc);
printf("pid = %d\n",proc->pid);
printf("name = %s\n",proc->name);
printf("pior = %d\n",proc->prior);
printf("state = %d\n",proc->state);
printf("start_time = %d\n",proc->start_time);
printf("----------------------------------------------------------\n");
Node *nodo = create_node();
Process *proc = malloc(sizeof(Process));
proc->pid = pid;
proc->state = 0;
nodo->value = proc;
append(process_list, nodo);
pid = pid +1;
}
fclose(fp);
return 0;
}
有主() 你可以看到我打印的結構體變量的狀態,看看他們的價值觀和一切順利的話,除了未改變PID 。 while循環完成後,我打印了鏈接列表中的所有進程及其屬性,並且它們全部都已更改。在這裏你可以看到一個帶輸出的SS。
我真的不知道發生了什麼事我的計劃有任何幫助將是巨大的,我知道它的一個非常特殊的情況下,但我不知道如何做一個工作的例子,顯示了同樣的問題。 (*我現在更新了pid的輸出結果,但主要問題並沒有解決,我仍然無法弄清楚爲什麼Process attr會改變)。
Input sample:
p1 2 3 10 1 2 3 4 5 6 7 8 8 9
p2 1 4 8 6 2 6 4 3 2 2 1
p3 3 5 5 1 2 6 7 8
'PID = PID ++'是無效的。它應該是'pid ++'或'pid = pid + 1' – Barmar
將代碼發佈爲文本,而不是圖像。 – Barmar
'Process * proc = malloc(sizeof(Process)); PROC-> PID ++;'。考慮到'proc-> pid'是未分配的,你試圖增加一個隨機值(它可能是0,但可以是任何東西,因爲這是一個不明確的行爲)。你可能想'proc-> pid = pid ++;' – Evert