मेरी समस्या से दूर: सुनिश्चित करें कि आप कंस्ट्रक्टर में डायनामिक ऐरे को इनिशियलाइज़ करते हैं न कि क्लास के बॉडी में।


जब मैं एक स्थानीय int चर को एक सरणी का मान निर्दिष्ट करने का प्रयास कर रहा हूं, तो मैं एक पठन पहुंच उल्लंघन में आ रहा हूं। सरणी वास्तव में एक सूचक है जिसे गतिशील रूप से आवंटित किया जाता है और किसी अन्य वर्ग में प्रारंभ किया जाता है। मुझे यकीन नहीं है कि मैं क्या खो रहा हूं, अगर कोई मेरी मदद कर सकता है तो मैं इसकी सराहना करता हूं:

संपादित करें: मैंने पहले की गलती तय की है जहां मैंने सरणी को इंडेक्स से बाहर बुलाया है, लेकिन मुझे अभी भी एक पढ़ने की त्रुटि मिल रही है।

संपादित करें # 2: मैंने पॉइंटर्स का उपयोग किए बिना नीचे दिए गए कोड के समान स्निपेट को आजमाया है, और यह काम करता है। हालांकि, जब मैं गतिशील रूप से पॉइंटर्स आवंटित करता हूं, तो मेरा प्रोग्राम क्रैश हो जाता है।

#include <iostream>
using namespace std;


class Discretization {
public:
    int Number_Elements, Number_Nodes;
    int *Ji = new int [Number_Elements];
    int* Jj = new int[Number_Elements];
    double* x = new double[Number_Nodes], * y = new double[Number_Nodes];

    Discretization() {

        Number_Elements = 8;
        Number_Nodes = 9;


        Ji[0] = 1; Jj[0] = 2;
        Ji[1] = 2; Jj[1] = 3;
        Ji[2] = 3; Jj[2] = 4;
        Ji[3] = 2; Jj[3] = 5;
        Ji[4] = 3; Jj[4] = 6;
        Ji[5] = 6; Jj[5] = 7;
        Ji[6] = 7; Jj[6] = 8;
        Ji[7] = 7; Jj[7] = 9;

        x[0] = -8.327; y[0] = -35.040;
        x[1] = 0; y[1] = -35.040;
        x[2] = 0; y[2] = 0;
        x[3] = -8.327; y[3] = 0;
        x[4] = 8.327; y[4] = -35.040;
        x[5] = 8.327; y[5] = 0;
        x[6] = 25.778; y[6] = 0;
        x[7] = 25.778; y[7] = 5.986;
        x[8] = 25.778; y[8] = -5.986;

    }
};


class GeometricProperties : public Discretization {

public:


    void AddVar(int Current_Element) {


        int Node_m = Ji[Current_Element] - 1; //Returns the first node of the element
        int Node_n = Jj[Current_Element] - 1; //Returns the second node of the element


        //Retruns local x coordinate of node m and n
        double Node_m_x = x[Node_m];
        double Node_n_x = x[Node_n];
    }

    GeometricProperties() {

        AddVar(1);
    }
};



int main() {

    GeometricProperties myobj;


    return 0;
}
c++
0
CivilSigma 7 अप्रैल 2020, 04:09

1 उत्तर

सबसे बढ़िया उत्तर

GeometricProperties कॉल का निर्माता AddVar(2), जिसका अर्थ है CurrentElement 2 है। लेकिन Ji का आकार 2 है, इसलिए आप केवल 0 और 1 को अनुक्रमित कर सकते हैं।

जिसका अर्थ है कि आप Ji को सीमा से बाहर अनुक्रमित कर रहे हैं। यह यूबी है, और आपका प्रोग्राम क्रैश हो सकता है।

आपको यूबी के ऐसे सभी उदाहरणों को ठीक करने की आवश्यकता है। भले ही आपके प्रोग्राम में कोड में UB है जो कभी नहीं चलता है, प्रोग्राम गलत है।

0
cigien 7 अप्रैल 2020, 01:28