Кажется настолько странным... Не знаете, почему Microsoft C++ поставила красные строки под частью ReadData кода. Есть ли какая-то особенность, которую я должен делать, когда пытаюсь освободить массивы int и двойной массив? заранее спасибо
#include "ReadData.h"
ReadData::ReadData(string file)
{
}
tuple <int *, int *, double *> ReadData::CreatePtr (string file)
{
ifstream inFile;
inFile.open(file);
inFile >> IRP_Length >> CIndx_Length >>A_Length;
int *IRP=new int[IRP_Length];
int *CIndx=new int[CIndx_Length];
double *A=new double[A_Length];
for (int a = 0; a < IRP_Length; a++)
inFile >> IRP[a] ;
for (int b = 0; b < CIndx_Length; b++)
inFile >> CIndx[b] ;
for (int c = 0; c < A_Length; c++)
inFile >> A[c] ;
inFile.close();
return make_tuple(IRP,CIndx,A) ;
}
ReadData::~ReadData()
{
delete[] IRP;//red line under IRP
delete[] CIndx;//red line under CIndx
delete[] A;//red line under A
}
int *IRP=new int[IRP_Length];
int *CIndx=new int[CIndx_Length];
double *A=new double[A_Length];
В этих строках вы создаете локальные переменные IRP
, CIndx
и A
и инициализируете их. Мне кажется, что у вас, вероятно, есть некоторые члены с теми именами, которые вы имеете в виду:
IRP=new int[IRP_Length];
CIndx=new int[CIndx_Length];
A=new double[A_Length];
Intellisense стонет, потому что вы пытаетесь использовать этих неинициализированных членов.
Эти определения в функции CreatePtr
int *IRP=new int[IRP_Length];
int *CIndx=new int[CIndx_Length];
double *A=new double[A_Length];
являются определениями локальных переменных. Они не являются членами данных класса.
Таким образом, в деструкторе компилятор видит, что вы пытаетесь удалить неинициализированные элементы данных
delete[] IRP;//red line under IRP
delete[] CIndx;//red line under CIndx
delete[] A;//red line under A
Я думаю, вы имели в виду не локальные переменные в функции CreatePtr, а элементы данных.