освобождение массивов в реализации cpp C ++

0

Кажется настолько странным... Не знаете, почему 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
}
  • 0
    Intellisense это не всегда правильно.
  • 0
    Какие бывают типы IRP, CIndx и A?
Показать ещё 2 комментария
Теги:
memory-management

2 ответа

2
Лучший ответ
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 стонет, потому что вы пытаетесь использовать этих неинициализированных членов.

  • 0
    Держу пари, что они вообще не объявлены как участники, а Intellisense стонет по поводу необъявленных идентификаторов.
  • 0
    @FredLarson Вы можете быть правы. Красный подчеркивает ошибку?
Показать ещё 1 комментарий
2

Эти определения в функции 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, а элементы данных.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню