की पहचान त्रुटि के कारण विभाजन गलती (कोर फेंक दिया)

0

सवाल

मैं नया हूँ करने के लिए सी प्रोग्रामिंग. फैसला किया मैं सीख कर रही द्वारा समस्या सेट में से कुछ में cs50 ओपन कोर्सवेयर. निम्न कोड पैदा करता है, एक विभाजन गलती (कोर फेंक दिया) त्रुटि । मैं नहीं समझ सकता क्यों. मैंने पढ़ा है एक विभाजन त्रुटि के साथ नहीं है तक पहुँचने स्मृति आप के लिए पहुँच नहीं है. मैं देख नहीं क्या होगा कारण है कि. मैं मान रहा हूँ यह है के साथ करने के लिए संकेत दिए गए हैं. मैं नया हूँ करने के लिए संकेत दिए गए हैं. धन्यवाद ।

    #include <stdio.h>

// https://cs50.harvard.edu/x/2021/labs/1/population/

float yearly_llamas(float starting_population) {
    // returns number of llamas at the end of the year
    float born = starting_population / 3;
    float died = starting_population / 4;
    float end_of_year_pop = starting_population + born - died;

    return end_of_year_pop;
}

int main(void) {
    
    // use floats for precision
    float *start_population;
    float *end_population;

    // set start lower limit
    int start_min = 9;

    
    // make sure input for starting population is greater than or equal to 9
    do {
        printf("Starting population: ");
        scanf("%f", start_population);
    } while (*start_population < start_min);
    
 

    // get ending population, make sure greater than or equal to the starting population
    do {
        printf("Ending population: ");
        scanf("%f", end_population);
    } while (*end_population < *start_population);

    // print for verification
    printf("%f\n", *start_population);
    printf("%f\n", *end_population);

    float end_pop = yearly_llamas(*start_population);

    printf("Llamas at the end of the year: %f\n", end_pop);


  return 0;
}
c cs50 pointers segmentation-fault
2021-11-24 05:03:05
3
0

आप घोषित करने के लिए एक सूचक फ्लोट, लेकिन है कि सूचक सिर्फ इशारा करने के लिए कुछ भी नहीं किया है क्योंकि आप असाइन पता करने के लिए ।

इन लाइनों को बदलने

float *start_population;
float *end_population;

करने के लिए

float f_start_population;
float f_end_population;
float *start_population = &f_start_population;
float *end_population = &f_end_population;

को हल करना चाहिए विभाजन गलती है ।

2021-11-24 08:35:58
0

जबकि अन्य का जवाब बताता है कि आप समाधान है, मैं जोर देना चाहते हैं जिस तरह से करने के लिए मिल (और समाधान) इस तरह की समस्याओं: एक डिबगर का उपयोग. यह एक महत्वपूर्ण उपकरण के एक प्रोग्रामर, और यह जानने के लिए सबसे अच्छा उपयोग करने के लिए यह जल्दी ही बाद में की तुलना में. इस मामले में, आपकी समस्या काफी सरल है करने के लिए आसानी से पाया जा के साथ किसी भी डिबगर. बाद में, जब आप काम किया जाएगा के साथ और अधिक जटिल कोड और बहु सूत्रण, यह जानने के लिए मुश्किल का उपयोग करने के लिए है, जबकि यह आप को हल करने की कोशिश अपने (जटिल) की समस्या है । की कोशिश करो, कृपया इस समस्या को हल करने में अपने स्वयं का उपयोग करके एक डिबगर.

यदि आप कर रहे हैं, लिनक्स में, आप का उपयोग कर सकते हैं gdb और कोड चलाने के लिए जब तक यह दुर्घटनाओं । तो, आप का निरीक्षण किया backtrace (bt) को देखने के लिए पिछले निष्पादित लाइन. अन्त में, आप को परिभाषित एक ब्रेकपाइंट (p #n जहां #n है लाइन नंबर) में पिछले लाइन की दुर्घटना, और आप का निरीक्षण मूल्यों (p $variable के साथ $variable के नाम अपने चर) की कोशिश करने के लिए देखने के लिए क्यों यह काम नहीं करता है ।

एक जीयूआई के साथ डिबगर, यह आसान होना चाहिए (उदाहरण के लिए दृश्य स्टूडियो के साथ या Code::blocks).

2021-11-24 08:58:20
0

आप की घोषणा जब एक सूचक चर एफ की तरह float *f; आप कर सकते हैं केवल का उपयोग करें "" है, तो यह सूचक है वास्तव में ओर इशारा करते हुए करने के लिए स्मृति आरक्षित करके आप (अवधि आवंटित किया जाता है). आप कर सकते हैं या तो आवंटित चर पर "ढेर" का उपयोग कर malloc() समारोह, या, आसान बनाने के लिए, एक अलग ढेर पर चर बुलाया (एक स्वत: चर) लेखन के द्वारा float my_float; और कि का उपयोग कर. तो आप मिल:

float my_startfloat;
float *start_population = &my_startfloat;

उस ने कहा, मैं केवल करना होगा की घोषणा की नाव (पहली) लाइन, और फिर, जहां उपयुक्त हो, इस्तेमाल किया अपने पते: &my_startfloat. उदाहरण के लिए:

 float my_startfloat;
 scanf("%f", &my_startfloat);
2021-11-24 09:08:03

अन्य भाषाओं में

यह पृष्ठ अन्य भाषाओं में है

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

इस श्रेणी में लोकप्रिय

लोकप्रिय सवाल इस श्रेणी में