Почему массив, созданный с помощью ‘new’, становится равным NULL?

У меня есть что-то вроде этого: класс с функцией-членом, которая выделяет некоторую память. Почему при выходе из функции указатель становится равным NULL?

class A
{

private:
int* memoryblock;
public:
void assignsome(int n);

};

void A::assignsome(int n)
{
memoryblock = new int[n]; // At this point, debugger suggests memoryblock is not pointing to null.
}
// On exit of this function, memoryblock points to null!

По запросу: Вот полная разбивка:

int FileHandler::PerValueMemoryBlockRead(char* delimarray, unsigned int sizeofarray)
{
// File Opened and mValues_n calculated.
mValues = new int[mValues_n + 1];
mValuesAllocated = true;

// Assignment of the contents of mValues is done.

mValues[next_value_pos] = 0x0; // Last int set to zero. /// next_value_pos is an int which is incremented. (Code Removed because there is no point showing it.)
return 0;

}

void FileHandler::SerialPrint()
{
if(mValuesAllocated){
std::cout << "Address:" << mValues << std::endl;
std::cout << "Size=" << mValues_n << "B" << std::endl;
for(ull pr = 0; pr < mValues_n; pr ++){
std::cout << (int)mValues[pr] << " ";
}
std::cout << std::endl;
}
else{
std::cout << "Nothing to print. 'PerValueMemoryBlockRead' has not yet been called." << std::endl;
}
}

Тогда внутри основной:

    if((!datahandle.PerValueMemoryBlockRead(delimarray, 3))
&& (!converthandle.PerValueMemoryBlockRead(delimarray, 3))
&& dataoutput.is_open()){

dataoutput.seekp(0, std::ios::beg);

// Code
converthandle.SerialPrint(); // SEG FAULT
datahandle.SerialPrint(); // SEG FAULT
// End Code

-1

Решение

Если вы установите точку останова там, отладчик все еще не запустит линию.

Перейдите к следующей строке, чтобы увидеть его назначенным.

0

Другие решения

В таких случаях отладчик может вводить в заблуждение. На самом деле указатель не NULL, отладчик просто сбит с толку, и вы не знаете, какой A ты о чем? Я предлагаю использовать отладочную печать, если вы сомневаетесь в подобных случаях.

0

Вы должны увидеть пример A имеет значение memoryblock не равно NULL после вызова assignsome:

class A
{
private:
int* memoryblock;
public:
void assignsome(int n);
};

void A::assignsome(int n)
{
memoryblock = new int[n];
}

int main () {
A a;
a.assignsome(5);
return 0; // breakpoint here - a.memoryblock isn't NULL
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector