C创建空堆栈时出错
我试图创建一个空堆栈,但不知何故,malloc有一个错误,即使使用debbuger,我也无法理解 我的debbuger显示的信息是:C创建空堆栈时出错,c,stack,malloc,C,Stack,Malloc,我试图创建一个空堆栈,但不知何故,malloc有一个错误,即使使用debbuger,我也无法理解 我的debbuger显示的信息是: sysmalloc: Assertion (old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) ol
sysmalloc: Assertion (old_top == initial_top (av) && old_size == 0) || ((unsigned long) (old_size) >= MINSIZE && prev_inuse (old_top) && ((unsigned long) old_end & (pagesize - 1)) == 0) failed.
Aborted
我该怎么修
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
typedef struct
{
int x;
int y;
int r;
int g;
int b;
}Pixel;
typedef int TypeKey;
typedef struct {
TypeKey Key;
Pixel P;
} TypeItem;
typedef struct Cell_str *Pointer;
typedef struct Cell_str {
TypeItem Item;
Pointer Next;
} Cell;
typedef struct {
Pointer Top, Bottom;
int Size;
} TypeStack;
void FEmpty(TypeStack *Stack)
{
Stack->Top = (Pointer)malloc(sizeof(Cell*));
Stack->Bottom = Stack->Top;
Stack->Top->Next = NULL;
Stack->Size = 0;
}
int Empty(const TypeStack *Stack){
return (Stack->Top == Stack->Bottom);
}
int size(TypeStack Stack)
{
return (Stack.Size) ;
}
int main(int argc, char *argv[])
{
Pixel P[500][500];;
TypeStack *Stack;
FEmpty(Stack);
return 0;
}
#包括
#包括
#包括
#包括
类型定义结构
{
int x;
int-y;
INTR;
int g;
int b;
}像素;
typedef int-TypeKey;
类型定义结构{
打字键;
像素P;
}类型项目;
typedef struct Cell_str*指针;
类型定义结构单元{
类型项目;
接下来是指针;
}细胞;
类型定义结构{
指针顶部、底部;
整数大小;
}类型堆栈;
void FEmpty(类型堆栈*堆栈)
{
堆栈->顶部=(指针)malloc(sizeof(Cell*);
堆栈->底部=堆栈->顶部;
堆栈->顶部->下一步=空;
堆栈->大小=0;
}
int空(常量类型堆栈*堆栈){
返回(堆栈->顶部==堆栈->底部);
}
int size(类型堆栈)
{
返回(堆栈大小);
}
int main(int argc,char*argv[])
{
像素P[500][500];;
类型堆栈*堆栈;
FEmpty(Stack);
返回0;
}
1
堆栈
未初始化-它指向零或垃圾
在FEmpty
中,您立即取消引用(无效)指针,从而导致未定义的行为
您需要使用malloc
分配结构,或者只声明一个局部变量:
TypeStack Stack;
FEmpty(&Stack);
2. 其次,这里没有分配足够的内存。您只分配指针本身的大小,而不是它指向的结构 使用此结构可避免此错误
我强烈建议您减少使用
typedef
s,并且永远不要将指针隐藏在typedef后面-这会导致无法理解的代码。
TypeStack Stack;
FEmpty(&Stack);
Stack->Top = (Pointer)malloc(sizeof(Cell*));
Stack->Top = malloc(sizeof(*Stack->Top));