2016-03-30 145 views
0

我剛開始再次使用c,我無法弄清楚我在哪裏中斷堆棧。 有很多類似的問題,但答案是個人在這裏。 我希望有人能告訴我我做錯了什麼。運行時檢查失敗#2:變量'power'周圍的堆棧損壞

該平臺是windows,但是它是用於OS課程的,因此它應該可以在XV6(簡化版本的Unix版本6)上運行。

我有兩個結構:

struct elem { 
    unsigned char power; // the power of this item 
    float coef; // the coefficient 
}; 
struct item { 
    struct elem* elem; 
    struct item* next; 
}; 

,我有一個全局變量:

struct item* polynom1; 

當調試下面的方法,在return語句我得到一個異常「運行時檢查失敗#2:圍繞變量「電源」堆棧已損壞「:

struct item* readPolynom() 
{ 
    struct item* res = (struct item*)malloc(sizeof(struct item)); 
    struct item* nextPoly = res; 
    unsigned char power; 
    float coef; 

    res->next = NULL; 

    do 
    { 
     scanf("%hu%f", &power, &coef); 

     if (power != 0 || coef != 0) 
     { 
      nextPoly->elem = (struct elem*) malloc(sizeof(struct elem)); 
      nextPoly->elem->coef = coef; 
      nextPoly->elem->power = power; 
      nextPoly->next = (struct item*) malloc(sizeof(struct item)); 
      nextPoly = nextPoly->next; 
     } 
    } while (power != 0 || coef != 0); 

    nextPoly = NULL; 

    return res; 
} 

輸入是:5 5.5(輸入)4 4 (回車)0 0(回車)。 重要 - 'res'獲得正確的值。

我嘗試用%hhu /%u代替%hu,但我得到了相同的結果。 我也嘗試加入「free(nextPoly);」在「nextPoly = NULL;」之前- 還是一樣。

在此先感謝! :)

+0

平臺....... – pm100

+7

?很簡單:'power'是'無符號char'和'%hu'告訴'scanf函數'這是一個'無符號短'。 – immibis

+0

我也會將此評論添加到實際文章中。這個平臺是windows的,但它是一個操作系統課程,所以它應該可以在XV6(Unix版本6的簡化版本)上運行。 immibis - 我嘗試了%hhu和%u,但我得到了同樣的結果。 –

回答

0

更換

scanf("%hu%f", &power, &coef); 

通過

int tmppower; 
scanf("%hu%f", &tmppower, &coef); 
if (tmppower > 255) 
{ 
    printf("Invalid power\n"); 
    exit(1); 
} 
power = (char)tmppower; 
相關問題