所以这是我的问题,我一直试图在过去的5个小时内解决这个问题,我有一个头文件,一个测试文件和一个交流源文件.我真的很想了解发生了什么,以及为什么我可以在将来避免这个问题.头文件声明了struct但没有定义它:
typedef struct Stack *StackP;
在我的源文件Stack.c中我定义了堆栈:
struct Stack
{
int top;
int capacity;
int count;
ItemT items;
};
Run Code Online (Sandbox Code Playgroud)
在哪里ItemT定义为char *
在测试文件中,调用是:
StackP stackPtr = newStack();
以及我对c源文件中的newStack函数所拥有的是:
StackP newStack(void) {
struct Stack stack1;
StackP stackPtr = &stack1;
(stackPtr->items) = (ItemT)malloc(DEFAULT_CAPACITY*sizeof(ItemT));
(stackPtr->top) = -1;
(stackPtr->capacity) = DEFAULT_CAPACITY;
(stackPtr->count) = 0;
fprintf(stderr, "\nSuccesfully allocated memory to items...\n");
return stackPtr;
}
Run Code Online (Sandbox Code Playgroud)
现在,我的推送功能是:
void pushStack(StackP stackPtr, ItemT item) {
if ((stackPtr->count) == (stackPtr->capacity)) {
fprintf(stderr, "\nERROR: Full stack.\n");
}
else {
stackPtr->items …Run Code Online (Sandbox Code Playgroud)