2016-04-03 21 views
0

strcmp() kullanırken segfault alıyorum. Gdb kullanarak hata ayıklamayı denedim ve çalıştırdığımda (argümanlar olmadan) bir segfault alıyorum. Geriye doğru yöneldiğimde, segfault satır 20'de olduğunu gösterir, ancak neden segfaulting olduğunu anlayamıyorum. Strcmp() ifadesi satır 20 üzerindedir. Gönderiimde 0-21 satırları içerecek ancak gerekirse daha fazla ekleyebilirsiniz. aşağıdaki gibiC - strcmp() kullanıldığında segfault()

segfault ifadeleri ben run komutunu kullanın şunlardır:

Program received signal SIGSEGV, Segmentation fault. 
__strcmp_sse2() at ../sysdeps/x86_64/multiarch/../stcmp.S:213 
213 ../sysdeps/x86_64/multiarch/../strcmp.S: No such file or directory. 

Ondan sonra bir backtrace yapmak ve bu olsun:

İşte
#0 __strcmp_sse2() at ../sysdeps/x86_64/multiarch/../strcmp.S:213 
#1 0x0000000000400aa6 in main (c=1, v=0x7fffffffead8) at myls.c:20 

hatları 0-21 benim kodudur :

( )
+2

okumak "Ben (kanıtlar olmaksızın) çalıştırdığınızda" - Ha ??? * daha iyi * en az bir argüman sağladınız ya da standart başına [v] [1] NULL; 'strcmp', argümanlarının her ikisi için * NULL ile iyi oynamamaktadır. – WhozCraig

+0

@WhozCraig bu konuda bazı arka plan: unix 'ls' komutunu taklit eden kendi ls programımı yazıyorum. '/ Myls' ile çalıştırdığımda, bu c = 1 doğru mu? Ve ./myls -l ile çalıştırdığımda c = 2 mi? ve '-l' = v [1]? –

+0

Aşağıda Kons tarafından sağlanan bilgileri [http://stackoverflow.com/questions/3024197/what-does-int-argc-char-argv-mean) dikkatle okumanızı şiddetle tavsiye ederim. Bu soruyu ve çok fazla * * daha fazla cevap verir. – WhozCraig

cevap

0

Ya programa argümanlar geçmiyorsunuz ya da if ifadesinden hemen sonra segfaults. Strcmp çalışır.

Düzenleme: Yalnızca argümanlar olmadan iletilmediğinizi fark ettiniz. Sen argümanları olmadan aradığınız hiçbir v[1]

+0

Ama başka bir ifadem var ki, '(c <2) {'ise, hala bir segfault almalı mıyım? –

+0

Evet, çünkü siz v [1] 'yi değerlendiriyorsunuz, ilk –

+0

Yani, eğer ben (c <2)' yi ilk ifadem yapmalı mıyım? Bu bunu düzeltir mi? –

1

olduğunda sen v[1] baþvurduðunuzu (c = 1) ve (c 2 sanki) programa verilen ilk argüman erişen ..

ben sizi önermek Bu yanıt

What does int argc, char *argv[] mean?

+0

Bunun ile ne ilgisi var "strcmp.S" başlamıyor mu? Hata, "Böyle bir dosya veya dizin yok." – DrumM

İlgili konular