我有一個名爲SemCreate的函數,它接受一個名稱爲int和一個指針作爲參數。我希望指針指向一個新的結構,我想返回一個int,如果它沒問題,則返回0。嘗試設置指向結構的指針
int P1_SemCreate(char *name, unsigned int value, P1_Semaphore *sem){
USLOSS_Console("Create a semaphore\n");
if(!verifyKernel()) {
//USLOSS_Console("ERROR: Not currently in Kernel mode\n");
USLOSS_Halt(1);
}
if(numSems>= P1_MAXSEM){
//USLOSS_Console("ERROR: MAX semaphore already exist\n");
return -2;
}
if(name == NULL){
return -3;
}
interruptsOff();
int i;
for (i = 0; i < P1_MAXSEM; i++) {
if (semTable[i].inUse == 0) {
semTable[i].value = value;
semTable[i].list = NULL;
semTable[i].name = malloc(sizeof(char));
strcpy(semTable[i].name, name);
semTable[i].inUse = 1;
semaphore *temp = NULL;
temp = malloc(sizeof(semaphore));
temp->value = value;
temp->list = NULL;
temp->name = malloc(sizeof(char));
strcpy(temp->name, name);
*sem = temp;
break;
}
}
numSems++;
interruptsOn();
return 0;
}
眼下指針是函數內的罰款,但一旦我返回指針爲空
編輯:數組semTable是信號量的數組
typedef struct semaphore{
int value;
char * name;
struct node *list;
int checkPoint;
int inUse;
}semaphore;
typedef struct PCB {
USLOSS_Context context;
int (*startFunc)(void *); /* Starting function */
void *startArg; /* Arg to starting function */
int pid;
int status;
int killedStatus;
int state;
int priority;
char name[50];
int parentPID;
int numOfChild;
int blockFlag;
struct sempahore *blockSem;
char *stack;
struct node *children;
struct node *zombiList;
int cpuTime;
int startTime;
struct semaphore *childSem;
} PCB;
typedef struct node {
PCB *pcb;
struct node *next;
} Node;
我在函數體中看到的唯一結構是'semTable',但是不顯示它的創建位置。傳入函數參數包括'P1_Semaphore * sem',但是'sem'!='semTable'。修復你的代碼片段以包含所有相關的部分。 – ryyker
你確定要爲'name'分配1個字節嗎?它只能容納一個角色。並且總是發佈[mcve] –
什麼是'P1_Semaphore'?與信號量有什麼不同? –