实际上我正在开发使用单元测试。 但我以其他形式分解我的代码以询问我所遇到的错误。
我在header
档案
typedef struct
{
void *topOfStack;
}Stack;
typedef enum {NUMBER,OPERATOR,IDENTIFIER}Token;
int operatorEvaluate(Stack *numberStack , Stack *operatorStack);
void * pop(Stack *stack);
以下是各自的source
文件
#include "try.h"
void *pop(Stack *numberStack)
{
Token *newToken = NUMBER;
return newToken;
}
int operatorEvaluate(Stack *numberStack , Stack *operatorStack)
{
Token *first = (Token*)pop (numberStack);
if(numberStack != operatorStack)
{
if(*first == NUMBER)
return 1;
}
return 0;
}
这是我称之为main
#include "try.h"
#include <stdio.h>
int main ()
{
Stack numberStack;
Stack operatorStack;
int num;
num = operatorEvaluate(&numberStack , &operatorStack);
printf("This is the returned value: %d",num);
return 0;
}
当我尝试编译时,单元测试告诉我内存访问不良。
所以我尝试使用eclipse来编译这些,并且windows告诉.exe
已停止工作。
希望有人可以帮助我,我坚持了很长时间......
答案 0 :(得分:0)
启用编译器警告。
特别是,这没有道理:
Token *newToken = NUMBER;
这是一个指针,你正在分配一个值。
我无法提出修正案,因为我不知道你在做什么。
答案 1 :(得分:0)
pop()
函数未触及堆栈,并返回转换为指针的枚举。如果您尝试通过该指针访问任何内容,则会引发未定义的行为。
答案 2 :(得分:0)
您的pop
功能在某些方面有误。你可能希望它实际上弹出你的堆栈,而不是返回一个常量(顺便说一下它也没有做到!)......就像这样:
void *pop(Stack *numberStack)
{
return numberStack->topOfStack;
}
但是如果你这样做它仍然会崩溃,因为你永远不会初始化你的堆栈或填充topOfStack
指针。