作者a75088285 (活在回憶中的回憶)
看板C_and_CPP
標題[問題] 一樣的碼結果不一樣
時間Mon Mar 11 16:26:28 2019
開發平台(Platform): (Ex: Win10, Linux, ...)
VMware/fc8_fedora
編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出)
gcc
問題(Question):
兩段程式碼對照相同但是卡在scanf出現記憶體區段錯誤
餵入的資料(Input):
#include <stdio.h>
int main()
{
int x,y,z,x1,y1,z1;
x=2;y=1,z=3;
x1=x;y1=y;z1=z;
x=z1;y=x1;z=z1+y1;
printf("%d %d %d\n",x1,y1,z1);
printf("%d %d %d\n",x,y,z);
return 0;
}
#include <stdio.h>
int main (void)
{
int a;//-----------------這裡造成錯誤的樣子...
int x,y,z,x1,y1,z1/*,a*/;//------a放在裡面就沒問題,不懂為何冏
x=2;y=1;z=3;
printf("type in the days rabbits live\n");
scanf("%d",a);
// for(i=0;i<=a;i++)
// {
x1=x;y1=y;z1=z;
x=z1;y=x1;z=z1+y1;//think the order
// }
printf("%d %d %d\n",x1,y1,z1);
printf("%d %d %d\n",x ,y ,z );
//printf("after %d days, there are %d rabbits\n",n,x+y+z);
return 0;
}
預期的正確結果(Expected Output):
4
2 1 3
3 2 4
錯誤結果(Wrong Output):
4
程式記憶區段錯誤
程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔)
補充說明(Supplement):
上述為兩段碼,第一段是除錯用的對照,第二段是練習用的兔子增殖問題,
老師講的原理我聽不懂所以就照自己的想法打了這個,想法是東西就照字面
指定對應變數,然後變數的前值就多設一整組變數來抓,可能講得很模糊,
題目的話是這樣:
假設一對小兔子一個月後變中兔子,再一個月變大兔子,
再一個月每對大兔生一對小兔,設兔子不死的n個月後兔子總對數.
然後在驗證for的時候一路除錯結果發現這個,
我搞這個搞了一個下午了其他習題都沒做冏冏冏,
問老師回答是我的變數順序有誤,要設一個temp給xyz用等等...
不過我怎麼想都不對,都特意多一整組變數了怎麼是順序問題冏,
我以後會乖乖照老師的打,可不可以懇請指點我是缺了什麼觀念冏
還有我現在是在資策會上課,用的是講義配蔡明志老師的C Primer Plus,
有沒有再簡單一點的...
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.164.138.249
※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1552292791.A.7CD.html
推 jerryh001: scanf要&a 03/11 16:31
推 CMJ0121: 查 man : the next pointer must be a pointer to int 03/11 16:32
→ a75088285: 感謝囧,東改西改結果是這個沒改… 03/11 17:05