调用函数时内存访问不正确

时间:2014-03-18 13:18:06

标签: c function pointers memory runtime-error

实际上我正在开发使用单元测试。 但我以其他形式分解我的代码以询问我所遇到的错误。

我在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已停止工作。 希望有人可以帮助我,我坚持了很长时间......

3 个答案:

答案 0 :(得分:0)

启用编译器警告。

特别是,这没有道理:

Token *newToken = NUMBER;

这是一个指针,你正在分配一个

我无法提出修正案,因为我不知道你在做什么。

答案 1 :(得分:0)

pop()函数未触及堆栈,并返回转换为指针的枚举。如果您尝试通过该指针访问任何内容,则会引发未定义的行为。

答案 2 :(得分:0)

您的pop功能在某些方面有误。你可能希望它实际上弹出你的堆栈,而不是返回一个常量(顺便说一下它也没有做到!)......就像这样:

void *pop(Stack *numberStack)
{
    return numberStack->topOfStack;
}

但是如果你这样做它仍然会崩溃,因为你永远不会初始化你的堆栈填充topOfStack指针。