我的C++程序调试时出现“Program received signal SIGSEGV,Segmentation fault.”是什么原因,求指导。 用dev-c++调试时提示 Program received...

C\u7a0b\u5e8f\u8c03\u8bd5\u65f6\u51fa\u73b0Program received signal SIGSEGV, Segmentation fault\uff1f

\u76ee\u6d4b\u9519\u8bef scanf("%d",hi[i]); -\u300b scanf("%d",&hi[i]);

\u8fd9\u662fHEAD\u4e00\u4e2a\u6307\u9488\uff0c\u8d4b\u503c\u4e3a0\uff0c\u6ca1\u6709\u4efb\u4f55\u6307\u5411\uff0c\u5982\u4e0b\uff1a
#include
int main()
{
int i=0;
int n=1;
printf("\u8bf7\u8f93\u5165\u4e00\u4e2a\u6b63\u6570\u5b57\n");
scanf("%d",i);
while(i>1)
{
n=i*n;
i=i-1;
}
printf("n\uff01=%d",n);
return 0;
}

你的程序是运行在linux上的吧?


1:错误信息的意思是收到一个信号,名字为段错误(信号值是11,程序收到这个信号的默认处理是退出),我看你应该是刚开始写程序不久,这个信号相信会一直陪伴着你的编程生涯,是程序运行最常见的错误之一。

2:这个信号产生的机制是由于程序试图访问他并没有权限访问的内存。操作系统为每个程序分配内存的时候都指定了访问权限,程序只能访问自己有权访问的内存。而软件导致这个信号产生的原因,一般情况下是内存越界访问,比如数组越界访问,线程栈溢出等等。

3:你的程序产生这个信号的原因本质也是越界

long s1[1000][1000]={0},s2[1000][1000]={0};

一个long类型是8字节,S1的大小是8000000字节也就是8MB,S1和S2加起来16MB,这2个变量都是局部变量,也就是栈变量,分配在内存的栈区。而linux默认一个程序的线程栈最大是10MB,所以越界了,把S1和S2改小点,比如改成S1[100][100],就可以正常运行了。

4:当然你也可以改linux的线程栈最大值,查下ulimit命令就可以了。或者用malloc将这2个变量动态分配在内存堆区上,堆区一般没限制大小。



long s1[1000][1000]={0},s2[1000][1000]={0};

这句话放在main函数外面当成全局变量就好了。不要在函数里开这么大的内存。

另外

s2[i][j]<2147483648

非常不建议这么写……鬼知道编译器能不能自动转换这个数到long int

要不然改成

s2[i][j]<2147483648ll

要不改成

s2[i][j]<=2147483647


  • c璇█涓pr浠涔堟剰鎬漜璇█涓璸rior
    绛旓細鍦–璇█涓紝pr閫氬父鏄痯rintf鍑芥暟鐨勭缉鍐欙紝鏄敤浜庤緭鍑哄埌鎺у埗鍙扮殑鍑芥暟銆俻rintf鍑芥暟鍙互杈撳嚭瀛楃銆佸瓧绗︿覆銆佹暟瀛楃瓑鍚勭鏁版嵁绫诲瀷锛屽苟涓斿彲浠ヨ繘琛屾牸寮忓寲杈撳嚭銆傚叾涓紝pr琛ㄧず鈥減rint鈥濓紝鍗虫墦鍗扮殑鎰忔濄傞氳繃printf鍑芥暟锛屾垜浠彲浠ユ柟渚垮湴灏嗙▼搴忚繍琛岃繃绋嬩腑浜х敓鐨勬暟鎹緭鍑哄埌鎺у埗鍙帮紝鏂逛究鎴戜滑杩涜璋冭瘯鍜屾煡鐪嬬▼搴忚緭鍑虹粨鏋溿傚悓鏃讹紝pri...
  • C璇█楂樻墜璇疯繘:鐪嬪搱鍑虹幇杩欑閿欒鐨勫師鍥?
    绛旓細宸茬粡鏄庣‘鍛婅瘔浣狅細prinf鎷煎啓閿欎簡锛屽簲璇ユ槸printf銆
  • Keil璋冭瘯绋嬪簭缂栬瘧鏃舵樉绀 *** WARNING L16: UNCALLED SEGMENT, IGNORED F...
    绛旓細浠旂粏鐪嬬紪璇戝璇濇鐨勫唴瀹癸紝鎴戜篃閬囧埌杩囩被浼肩殑鏄嫾鍐欏啓閿欏鑷存姤閿欙紝display涓殑l鍜宎椤哄簭璋冩崲瀵艰嚧閿欒锛涘嚱鏁版嫾鍐欓敊璇紝璋冪敤鏃跺張鍐欐垚姝g‘鐨勶紝瀵艰嚧鎶ラ敊瀹氫箟鐨勫嚱鏁版病鏈夎璋冪敤銆傛煡鎵炬柟娉*(鍙傝冨浘鐗囦腑鏍囨敞)锛氭悳绱㈢紪璇戝璇濇涓殑SEGMENT鎻愮ず鍐呭dispaly锛屽苟鍙傝僑YMBOL涓嬫彁绀虹殑姣斿鏌ユ壘display銆俉ARNING L16: UNCALLED SEGME...
  • c51鐨刱eil3涓鍑虹幇鐨勮鍛,璇烽棶鍗曠墖鏈虹殑楂樻墜浠槸鍝噷鍑虹幇闂浜
    绛旓細UNCALLED SEGMENT锛氫綘鍐欎簡涓涓嚱鏁帮紝浣嗘槸浠庢潵娌℃湁璋冪敤瀹冿紝瀹冩槸涓嶄細浜х敓浠g爜鐨勩備竴鑸彲浠ュ拷鐣 MULTIPLE CALL TO SEGMENT 锛氳鍑芥暟鍙兘浼氬湪涓柇鏈嶅姟绋嬪簭鍜屼富绋嬪簭涓悓鏃惰璋冪敤銆傝繖涓鍛婅娉ㄦ剰銆傚涓荤▼搴忚皟鐢ㄨ鍑芥暟杩樻病鏈夋帹鍑哄氨杩涘叆涓柇绋嬪簭锛屽湪涓绋嬪簭鍐嶆琚皟鐢紝鍙兘浼鍑虹幇閫昏緫閿欒銆俇NRESOLVED EXTERNAL SYM...
  • 鐢佃剳寮鏈鏃跺嚭鐜鍔犺浇C:PRROGRA~1\3721\helper.dll鏃跺嚭閿欐壘涓嶅埌鎸囧畾鐨...
    绛旓細1锛屽紑濮嬶紞杩愯锛嶈緭鍏ワ細regedit锛岀劧鍚庡洖杞 2锛岄夋嫨鈥鎴戠殑鐢佃剳鈥濓紝鐒跺悗鐐瑰嚮鈥滄枃浠垛濓紞鈥滃鍑衡濓紞闅忎究璧蜂釜鍚嶅瓧鐐光滀繚瀛樷濄傝繖鏍峰仛鐨勭洰鐨勬槸澶囦唤涓涓嬫敞鍐岃〃锛屼互鍏嶈鎿嶄綔鍚庡強鏃舵仮澶嶃傛仮澶嶇殑鏂规硶鏄紝鎵惧埌浣犲垰鎵嶄繚瀛樼殑鏂囦欢锛屽弻鍑诲畠锛岀劧鍚庨夋嫨鈥滃厑璁稿鍏モ濆嵆鍙3锛岄夋嫨鈥滄垜鐨勭數鑴戔濓紝鎸塅3閿紝鐒跺悗杈撳叆鈥渉elper鈥...
  • c璇█鐨,甯垜鐪嬩笅杩欐鏄粈涔堟剰鎬?
    绛旓細define PR(a) printf("%d\t",(int)(a))杩欒浠g爜鐨勬剰鎬濇槸鐢≒R鏉ユ浛printf锛岃緭鍑轰竴涓暣鍨嬪硷紝骞惰緭鍑轰竴涓猅AB閿紝濡 PR(10) 杈撳嚭 10 define PRINT(a) PR(a); printf("ok!")鏄敤PRINT鏉ヨ緭鍑轰竴涓暟鍊硷紝骞惰緭鍑轰竴涓猳k!浠ヤ笂杩欐浠g爜鐨勮緭鍑虹粨鏋滀负:1 ok!2 ok!3 ok!
  • pr.cl鍜宎llc涓や釜鍙傛暟鍔熻兘鏈変粈涔堝尯鍒
    绛旓細pr.cl鏄竴绉嶇敤浜庢帶鍒剁紦瀛樿瀵归綈鐨勭紪璇戝櫒鎸囦护锛屽畠鍙互纭繚鐗瑰畾鍙橀噺鎴栨暟鎹粨鏋勫湪鍐呭瓨涓寜鐓х紦瀛樿鐨勫ぇ灏忚繘琛屽榻愶紝浠ユ彁楂樿闂晥鐜囥傝繖涓弬鏁伴氬父鐢ㄤ簬浼樺寲鐗瑰畾鐨勪唬鐮佹鎴栨暟鎹粨鏋勶紝瀵逛簬鍏朵粬閮ㄥ垎鐨勫唴瀛樿闂病鏈夊奖鍝嶃傝宎llc鏄竴绉嶇敤浜庢帶鍒舵暣涓绋嬪簭鐨勫唴瀛樺榻愭柟寮忕殑缂栬瘧鍣ㄩ夐」銆傚綋浣跨敤allc鍙傛暟鏃讹紝缂栬瘧鍣ㄤ細灏藉彲鑳...
  • unix c 鐨勪竴涓皬闂 鎴戠紪璇戜簡鍔ㄦ佸簱libpr.a 閲岄潰鍖呮嫭浜唒r1.o pr2...
    绛旓細-L 鍚庤窡浣犲姩鎬佸簱鎵鍦ㄧ殑缁濆璺緞 鐒跺悗绌烘牸 -l鍔犱綘鍔ㄦ佸簱鐨勫悕瀛 濡傛槸锛-L /xxx/xxxx -lpr1 -lpr2 杩樻湁缂栬瘧鍔ㄦ佸簱鐨勬椂鍊锛宲r1搴撳悕瑕佺紪璇戞垚libpr1 ,libpr2 鐒跺悗锛屼綘闇瑕佷慨鏀/etc/ld.so.conf鏂囦欢锛屽湪鏈鍚庯紝鍙﹁捣涓琛岋紝鍐欎笂鍔ㄦ佸簱鐨勭粷瀵硅矾寰 鐒跺悗锛岀粓绔繍琛宭dconfig -v 涓鍒嘜K锛
  • 姹傚ぇ绁炶В鏁,鎴戠敤KeilC缂栦竴涓绋嬪簭,缂栬瘧鏃朵粬鏄剧ず杩欎釜,鏄粈涔堟剰鎬濆晩?_鐧 ...
    绛旓細鍙兘鏄娆℃彃鍏ュご鏂囦欢寮曡捣鐨,鍦ㄥ啓澶存枃浠鐨勬椂鍊鐢ㄤ笅闈㈢殑鏍煎紡 ifndef XXXX_H_FILE_H//鍙嚜宸遍殢渚胯捣 define XXXX_H_FILE_H ...//澶存枃浠 endif 杩欐牱灏变笉浼鍑虹幇閲嶅畾涔変簡
  • C 璇█鐨勪竴涓绋嬪簭闂
    绛旓細鐒跺悗鏈鍚庡氨鐩稿綋浜庤繖鏍风殑浜 define PR(a) printf("%d\t",(int)(a))define PRINT(a) PR(a); print("ok!")main(){ int i,a=1;for(i=0;i<3;i++)printf("%d\t",(int)(a));print("ok");/*涓嶇悊瑙g殑鍥犺鏄负浠涔堝彧鏈変竴涓猳k鍚э紝鍏跺疄瀹忕殑灞曞紑鍙槸绠鍗曠殑鏇挎崲鍚т簡锛岃宖or寰幆鍙堟病...
  • 扩展阅读:c++教程 ... 电脑无法启动卡在setup ... c++编程 ... 编译c++的软件 ... c语言编译器手机版app ... c++编译流程 ... c++常用编译器 ... c++编程学习软件 ... c++编程题经典100例 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网