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;
}
假设我在我的程序中添加了一个材料类型。这意味着:
- OperationsStack.length = 1
- OperationsStack.operations 是一种操作类型:
- OperationsStack.operations[0].operationType = "add"
- OperationsStack.operations[0].mat = ("name1","name2",2(随机整数))
现在我调用 undo,操作将得到 pop 函数的结果,这就是我们有几行的 OperationsStack.operations[0]。但是这里出现了错误。
我发现了问题。看来我的程序中断了,这将结束它调用一个函数,该函数将释放一个未使用 malloc 分配的变量。
我正在尝试为 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;
}
假设我在我的程序中添加了一个材料类型。这意味着:
- OperationsStack.length = 1
- OperationsStack.operations 是一种操作类型:
- OperationsStack.operations[0].operationType = "add"
- OperationsStack.operations[0].mat = ("name1","name2",2(随机整数)) 现在我调用 undo,操作将得到 pop 函数的结果,这就是我们有几行的 OperationsStack.operations[0]。但是这里出现了错误。
我发现了问题。看来我的程序中断了,这将结束它调用一个函数,该函数将释放一个未使用 malloc 分配的变量。