C创建空堆栈时出错

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

我试图创建一个空堆栈,但不知何故,malloc有一个错误,即使使用debbuger,我也无法理解

我的debbuger显示的信息是:

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));