У меня возникла проблема с назначением новых значений динамическому массиву int, который является переменной-членом данных класса IntersectionFlowRate(). Я могу инициализировать и распечатать значения массива внутри конструктора. Однако, когда я выхожу из конструктора в другой класс, а затем вызывается функция внутри класса IntersectionFlowRate(), проходящая в переменных, чтобы перезаписать начальные значения элемента данных, это приведет к ошибке сегментации. Я отлаживался, чтобы обнаружить, что перезапись массива вызывает ошибку seg. И даже попытка получить доступ к динамическому массиву в рамках одной из его функций приведет к сбою.Назначение переменной переменных динамического массива C++
Мой вопрос в том, как я могу изменить значения переменной-члена динамического массива int из одной из своих функций i.e setArrayElement (int index, int x).
Вот некоторые из моих кодов. Извините, если я не понимаю или что-то нелепое. Я застрял на этом часами.
#ifndef INTERSECTIONFLOWRATE_H
#define INTERSECTIONFLOWRATE_H
class IntersectionFlowRate
{
public:
IntersectionFlowRate();
~IntersectionFlowRate();
void setFlowCycle(int index, int flow);
private:
int* m_flowRateMotorCycle;
};
#endif
в файле .h^
#include "IntersectionFlowRate.h"
#include <cstdlib>
#include <iostream>
#include <new>
using namespace std;
IntersectionFlowRate::IntersectionFlowRate()
{
const int SIZE = 4; //Constant for m_flowRates[] size
//DYNAMIC MEMORY DELETE LATER
m_flowRateMotorCycle = new int[SIZE];
for(int i = 0; i < SIZE; i++){
m_flowRateMotorCycle[i] = 0;
cout << m_flowRateMotorCycle[i] << endl;
cout << "WE GOT HERE" << endl;
}
}
void IntersectionFlowRate::setFlowCycle(int index, int flow){
cout << "INDEX: " << index << endl;
cout << "FLOW: " << flow << endl;
m_flowRateMotorCycle[index] = flow; //seg fault is here
}
У меня есть еще один класс, который создает указатель на объект IntersectionFlowRate(), а затем вызывает функцию setFlowCycle проходящее в двух ДЕЙСТВИТЕЛЬНО Интс. С помощью отладки я смог передать 0 и 3 функции setFlowCycle (0, 3) просто отлично и вывести эти переменные внутри функции.
#ifndef TRAFFICSIM_H
#define TRAFFICSIM_H
#include "IntersectionFlowRate.h"
using namespace std;
class TrafficSim
{
public:
TrafficSim(); //Default Constructor
TrafficSim(const char* file); //Constructor
~TrafficSim(); //Destructor
private:
IntersectionFlowRate* m_flowRate;
};
#endif
#include "TrafficSim.h"
#include "IntersectionFlowRate.h"
#include <iostream>
#include <string>
#include <fstream>
#include <cstdlib>
using namespace std;
TrafficSim::TrafficSim()
{
IntersectionFlowRate* m_flowRate = new IntersectionFlowRate();
m_flowRate->setFlowCycle(0, 3);
}
Я воспроизвел ошибку с помощью этого кода. Если никто другой, я не могу полностью понять, что, возможно, не так.
Вы должны предоставить [MCVE] (http://stackoverflow.com/help/mcve). – MikeCAT
Пример [минимальный] (http://stackoverflow.com/help/mcve) - это не код, в котором вы * думаете * проблема, это минимально возможный ** полный ** код, который реплицирует проблему. Я предполагаю, что у вас есть [правило 0/3/5] (http://en.cppreference.com/w/cpp/language/rule_of_three) нарушение. Опубликуйте полный пример. – user657267
[Простой тест] (http://melpon.org/wandbox/permlink/zZktmhgtuwPpZVPf) не дал мне ошибку сегментации. Вы определили (и инициализировали его, если необходимо) 'm_flowRateCar' правильно? – MikeCAT