C程序调试断言失败

C program Debug Assertion Failed

我正在尝试为 C 程序实现撤消功能。问题是我得到调试断言失败(我标记了该行)。我是 C 语言的初学者,非常感谢您的帮助。我希望有足够的代码来解决这个问题。

从 Controller.c

撤消功能
int undo(controller *ctr) {
    if (isEmpty(ctr->operationsStack)){
        return 0;
    }
    Operation operation = pop(ctr->operationsStack); //problem
    if (strcmp(getOperationType(&operation), "add") == 0) {
        materie mat = getMaterie(&operation);
        char nume[8];
        strcpy(nume, getNume(&mat));
        sterge(ctr->repo, nume);
    }
    return 1;
}

来自 OperationsStack.h

的结构
typedef struct
{
    materie mat;
    char operationType[10];
} Operation;

typedef struct
{
    Operation operations[100];
    int length;
} OperationsStack;

OperationsStack.c

Operation createOperation(materie planet, const char *operationType) {
    Operation operation;
    operation.mat = planet;
    strcpy(operation.operationType, operationType);
    return operation;
}

OperationsStack createStack() {
    OperationsStack operationsStack;
    operationsStack.length = 0;
    return operationsStack;
}

void push(OperationsStack *operationsStack, Operation operation) {
    if (isFull(operationsStack)) {
        return;
    }
    operationsStack->operations[operationsStack->length++] = operation;
}

Operation pop(OperationsStack *operationsStack) {
    if (isEmpty(operationsStack)) {
        materie mat;  //create a new 
        mat.cant = 0; //materie object 
        strcpy(mat.nume, " ");
        strcpy(mat.producator, " ");
        return createOperation(mat, "none"); 
    }
    else 
        return operationsStack->operations[--operationsStack->length];//problem
}

int isEmpty(OperationsStack *operationsStack) {
    return operationsStack->length == 0;
}

假设我在我的程序中添加了一个材料类型。这意味着:

我发现了问题。看来我的程序中断了,这将结束它调用一个函数,该函数将释放一个未使用 malloc 分配的变量。