2013-07-04 21 views
6

कोड के विषय में दो सवाल नीचे तैनात हैं बनाना:

        1) जब मैं codeblocks पर इस कोड को चलाने के लिए, कोड कभी कभी सफलतापूर्वक चलता (0 लौटने) लेकिन आम तौर पर में जो परिणाम इसके बाद एक त्रुटि सभी परिणामों को दिखाती है (वापसी -1073741819)। यह एक केस क्यों है?

        2) मान सरणी के अंतिम तत्व को छोड़कर सभी सही हैं जहां मान 1 होना चाहिए (pTriangle [20] = 1)। हालांकि, मुझे अंत में कुछ कचरा संख्या मिल रही है, मैं गलत क्या कर रहा हूं?

मुझे एहसास हुआ है कि मैं द्विपक्षीय गुणांक के साथ उसी परिणाम पर पहुंच सकता हूं लेकिन मुझे अभी भी पता नहीं है कि मुझे त्रुटि क्यों मिल रही है और अगर मेरी गलती मिल सकती है तो यह सबसे अच्छा होगा।

अद्यतन 1:
pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i]; समस्या प्रतीत होती है। जब मैंने इस कोड पर टिप्पणी की है, तो कार्यक्रम क्रैश नहीं हुआ था। मैं पता लगाने के लिए क्यों यह क्रैश हो रहा है और एक समाधान खोजने के लिए चारों ओर यह :)पास्कल त्रिभुज (अस्थिर कोड)

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

#define LEVEL 20 

int main() 
{ 
    int *pTriangle = (int*)malloc(sizeof(int)*(LEVEL+1)); 
    int i; 

    for (i = 0; i < LEVEL; i++) 
     pTriangle[i] = 0; 

    createPascalTriangle(pTriangle, LEVEL); 

    for(i = 0; i < LEVEL+1; i++) 
     printf("pTriangle[%d]: %d\n", i, pTriangle[i]); 

    free(pTriangle); 

    return 0; 
} 

int createPascalTriangle(int *pTriangle, int level){ 
    if (level <= 0) 
     return 0; 
    pTriangle[0] = 1; 
    pTriangle[1] = 1; 
    int i; 
    for (i = 2; i <= level; i++) 
     increasePascalTriangleOneLevel(pTriangle); 

    return 1; 
} 

int increasePascalTriangleOneLevel(int *pTriangle){ 
    int i = 1; 
    int temp[2] = {0}; 

    temp[0] = pTriangle[0]; 
    while (pTriangle[i] != 0){ 
     temp[i % 2] = pTriangle[i]; 
     pTriangle[i] = temp[i % 2 ? 0 : 1] + pTriangle[i]; 
     i++; 
    } 
    pTriangle[i] = 1; 

    return 1; 
} 
+0

वाह। यह इंडेंट है! –

+0

आह। धन्यवाद :) – kpark

उत्तर

1

सरणी के अंतिम तत्व प्रारंभ नहीं किया गया है की कोशिश कर रहा कोशिश कर रहा हूँ।

लिखें:

for (i = 0; i < LEVEL + 1; i++) 
    pTriangle[i] = 0; 
बजाय

:

for (i = 0; i < LEVEL; i++) 
     pTriangle[i] = 0; 
+0

इस कोड को मानक से मेल नहीं खाता है। (उदाहरण के लिए। विजुअल स्टूडियो इसे संकलित नहीं करता है।) इसका उपयोग करने से पहले, अपने फ़ंक्शन को घोषित करें। – szedjani

+1

मुझे लगता है कि यह बिल्कुल है। यह मेरे लिए ठीक काम करता था, लेकिन वालग्रिंड ने '(पीटीआरआंगल [i]! = 0)' (सूचकांक 20) पर अनियमित स्मृति तक पहुंचने के लिए चेतावनी दी। – Macattack

+0

कई मामलों में यह बिना किसी प्रारंभिकता के 0 है, लेकिन आप इसके बारे में निश्चित नहीं हो सकते हैं। – szedjani

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