कुछ प्रस्तावना: मैं एक कंप्यूटर इंजीनियरिंग छात्र जावा में 3 सेमेस्टर (डेटा संरचनाओं तक) के बाद सी में प्रथम श्रेणी ले रहा हूं। यह प्रश्न होमवर्क असाइनमेंट के संबंध में है, लेकिन मेरे लिए इसे हल करने से कुछ कदम हटा दिए गए हैं।तारों की एक सरणी को क्रमबद्ध करने के लिए stdlib के qsort() का उपयोग
मेरे पास एक इनपुट फ़ाइल है जिसे मैंने स्मृति में पढ़ा है जैसे कि यह char [9] [500] में संग्रहीत है। मैंने अधिकतम लंबाई 8 के अधिकतम 500 तारों में पढ़ा है। मैं qsort() फ़ंक्शन में निर्मित stdlib का उपयोग करके इस सरणी को सॉर्ट करने का प्रयास कर रहा हूं, और इसमें कुछ मेमोरी त्रुटियां हैं I कोड की
महत्वपूर्ण स्निपेट:
char data[4][500][60];
char debug[500][9];
size_t count = 0;
/* initialize file, open for reading */
FILE* pUserlog;
pUserlog = fopen("userlog","r");
while(!feof(pUserlog))
{
fscanf(pUserlog, "%9s %8s %16s",debug[count], data[1][count], data[2][count]);
fgets(data[3][count], 60, pUserlog);
count++;
}
यह खंड विन्यास में, डेटा पढ़ता है। इस भाग में रुचि की सरणी "डीबग" है। यह ऊपर निर्दिष्ट सरणी है।
int compare(const void* a, const void* b)
{
const char **ia = (const char **)a;
const char **ib = (const char **)b;
puts("I'm in compare!");
return strncmp(*ia, *ib,8);
}
यह qsort कॉल करने के लिए मेरे प्रयास है:
size_t debug_len = sizeof(debug)/sizeof(char*);
printf("debug len: %d, count: %d, sizeof(char*): %d\n",debug_len,count,sizeof(char*));
qsort(debug,count, sizeof(char *), compare);
मैं अपने कॉल में debug_len प्रतिस्थापन जहां गिनती है प्रयास किया, लेकिन मैं अभी भी segfaulting हूँ यहाँ qsort के लिए मेरी तुलना कार्य है। यहां आउटपुट है:
$ ./test debug len: 1125, count: 453, sizeof(char*): 4 I'm in compare! Segmentation fault (core dumped)
धन्यवाद!
जबकि (! Feof()) गलत है। फीफ झूठी वापसी करेगा, लूप दर्ज किया जाएगा, स्कैनफ डेटा पढ़ने में असफल हो जाएगा, डीबग [गिनती] में फर्जी डेटा होगा, और फिर फीफ सच हो जाएगा। आप इस मामले को गिनती करके ठीक कर सकते हैं - लूप के बाद, लेकिन आम तौर पर आपको बस कभी नहीं करना चाहिए (!feof()) –
यह segfault कहां है? यह निर्धारित करने के लिए कोर डंप की जांच करने के लिए एक अच्छा अभ्यास है कि सीगफॉल्ट कहां होता है, क्योंकि आमतौर पर आपको यह बताता है कि समस्या क्या है। –