У меня есть следующие структуры данных:функция возвращает некоторые указатели как NULL
struct Stack {
Vector* m_intArray; /*vector is stored here*/
int m_numOfElements;
};
struct Vector {
int* m_intArray; /*pointer to array of ints, data stored here*/
int m_intArrayCurrentSize;
int m_intArrayCapacity;
int m_blockSize;
int m_initialSize;
};
Вектор структура записывается в другой файл (vector.c) с функцией
Vector* VectorCreate(size_t _initialSize, size_t _blockSize)
, который создает вектор структуру и выделяет память для массива int в ней. В файле stack.c я написал функцию
Stack* StackCreate(size_t _initialSize, size_t _blockSize)
, который создает структуру стека и вызывает VectorCreate в поле «m_intArray» стека. Когда я называю StackCreate из главных, я вижу uding отладчика, что внутри функции, все в порядке и есть память, выделенная для всех трех указателей (указатель на стек, указатель на вектор и указатель на INT)
(gdb) p stackPtr
$11 = (Stack *) 0x603010
(gdb) p stackPtr->m_intArray
$12 = (Vector *) 0x603030
(gdb) p stackPtr->m_intArray->m_intArray
$13 = (int *) 0x603050
Когда функция заканчивается и возвращает указатель стека назад к основному, указатель int * имеет нулевое значение.
(gdb) p testStack
$14 = (Stack *) 0x603030
(gdb) p testStack->m_intArray
$15 = (Vector *) 0x603050
(gdb) p testStack->m_intArray->m_intArray
$16 = (int *) 0x0
Я не могу найти причину, по которой это происходит, в значительной степени невежественным в этом случае. Никогда не сталкивался с этим прежде, по достоинству оцените вашу помощь.
Heres стека Создать
Stack* StackCreate(size_t _initialSize, size_t _blockSize)
{
if (_initialSize == 0 && _blockSize == 0)
{
return NULL;
}
Stack* stackPtr = ((Stack*)malloc(sizeof(Stack)));
if (stackPtr == NULL)
{
return NULL;
}
stackPtr->m_intArray = VectorCreate(_initialSize, _blockSize);
if (stackPtr->m_intArray == NULL)
{
free(stackPtr);
return NULL;
}
}
Можете ли вы показать код для функций создания? –
Теперь я заметил, что забыл переустановить указатель в функции создания :) Спасибо за помощь! – susdu