我有以下数据结构:
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)
创建堆栈结构并在堆栈的“m_intArray”字段中调用VectorCreate。当我从main调用StackCreate时,我看到函数内部的调试器,一切正常,并且为所有三个指针分配了内存(指向堆栈的指针,指向vector的指针和指向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
当函数结束并将堆栈指针返回main时,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
我似乎无法找到它发生的原因,在这种情况下几乎无能为力。从来没有遇到它,将非常感谢你的帮助。
继承人堆栈创建
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;
}
}
答案 0 :(得分:1)
看起来你正在返回错误的指针。注意在第一个GDB段中,堆栈指针是0x603010
,但在第二个段中,它是0x603030
,它是第一个块中的向量指针。