2016-03-30 17 views
0

Sadece c'yi kullanmaya başladım ve yığınının nerede kesildiğini anlayamıyorum. Pek çok benzer soru var ama cevap burada bireyseldir. Umarım birileri bana yanlış yaptıklarımı söyleyebilir.Çalışma Zamanı Denetimi Arızası # 2: 'Güç' değişkeni etrafında yığın bozuk

Platform penceredir, ancak bir OS kursu için de XV6 (Unix sürüm 6'nın basitleştirilmiş sürümü) üzerinde çalışılması gerekir.

İki yapılar vardır:

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

ve genel değişken vardır: Aşağıdaki yöntemi hata ayıklama

struct item* polynom1; 

, iade ifade azından ben bir istisna olsun "çalışma zamanı kontrol Başarısızlık # 2: değişken 'iktidar' etrafında Stack "bozuk:

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; 
} 

girdidir: 5 5.5 (gir) 4 4 (gir) 0 0 (giriş). Önemli - 'res' doğru değerleri alır.

% hu yerine% hhu /% u değiştirmeyi denedim, ancak aynı sonucu aldım. Ayrıca "free (nextPoly)" eklemeyi de denedim; önce "nextPoly = NULL;" - hala aynı.

şimdiden teşekkürler! ? `Power` bir` işaretsiz char` ve `olan% hu`` scanf söyler: :)

+0

platformu tarafından

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

....... – pm100

+7

Basit değiştirin 'İmzasız bir kısa '. – immibis

+0

Bu yorumu asıl gönderiye de ekleyeceğim. Platform penceredir, ancak bir OS kursu için de XV6 (Unix sürüm 6'nın basitleştirilmiş sürümü) üzerinde çalışılması gerekiyor. immibis - Ben% hhu ve% u da denedim ama aynı sonucu aldım. –

cevap

0

int tmppower; 
scanf("%hu%f", &tmppower, &coef); 
if (tmppower > 255) 
{ 
    printf("Invalid power\n"); 
    exit(1); 
} 
power = (char)tmppower; 
İlgili konular