2013-10-28 8 views
60

मैं लिनक्स में एक सी प्रोग्राम है जो बहस के sqrt होने, कोड यह लिखने के लिए कोशिश कर रहा हूँ:सेगमेंटेशन गलती क्या है (कोर डंप)?

#include<stdlib.h> 
#include<stdio.h> 
#include<math.h> 

int main(char *argv[]){ 
    float k; 
    printf("this is consumer\n"); 
    k=(float)sqrt(atoi(argv[1])); 
    printf("%s\n",k); 
    return 0; 
} 

मैं पर मेरे इनपुट में टाइप करने के बाद "खोल>" शीघ्र, जीसीसी मुझे निम्न त्रुटि देता है :

Segmentation fault (core dumped) 
+0

http://en.wikipedia.org/wiki/Core_dump –

+4

गलत स्वरूप स्ट्रिंग का उपयोग आपको '% f' की आवश्यकता है,'% s' –

+1

'int main (int argc, char * argv []) 'आज़माएं। – Beta

उत्तर

86

"सेगमेंटेशन गलती" का अर्थ है कि आपने उस स्मृति तक पहुंचने का प्रयास किया है जिस पर आपके पास पहुंच नहीं है।

पहली समस्या main के आपके तर्कों के साथ है। main फ़ंक्शन int main(int argc, char *argv[]) होना चाहिए, और आपको argcargv[1] तक पहुंचने से पहले कम से कम 2 जांचना चाहिए।

इसके अलावा

, जब से तुम एक floatprintf (जो, वैसे, एक double में परिवर्तित हो जाता है जब printf को पारित करने) के लिए, आप का उपयोग करना चाहिए %f फॉर्मेट स्पेसिफायर में गुजर रहे हैं। %s स्वरूप विनिर्देश तारों के लिए है ('\0' -टाइमेटेड वर्ण सरणी)।

+1

आपको बहुत बहुत धन्यवाद: - * :) – user2929110

+0

मुझे सिखाया गया था कि यह 'int मुख्य (int argc, char * argv []) 'के बजाय' int main (int argc, char ** argv)' होना चाहिए। यद्यपि आपने इसे सही तरीके से रखा है, 'char \ * \ * 'ऐसा करने का वास्तविक' सही 'तरीका है क्योंकि यह किसी चरित्र के सूचक के लिए सूचक का प्रतिनिधित्व करता है। –

+2

@WillHopkins मानक कहता है कि 'int मुख्य (शून्य) 'और' int मुख्य (int argc, char * argv []) 'या समकक्ष स्वीकार्य है," समकक्ष "कहने के बाद फुटनोट के साथ" इस प्रकार,' int' हो सकता है 'int' के रूप में परिभाषित एक टाइपिफ़ नाम द्वारा प्रतिस्थापित किया गया है, या 'argv' के प्रकार को ' char ** argv' के रूप में लिखा जा सकता है, और इसी तरह। " तो वास्तव में, यह शैली का मामला है। (देखें 5.1.2.2.1 प्रोग्राम स्टार्टअप) –

संबंधित मुद्दे