使用malloc将内存分配给结构

使用malloc将内存分配给结构,c,pointers,struct,malloc,C,Pointers,Struct,Malloc,我有一个名为State的结构: typedef struct State{ char alphabets[2][6]; struct State *PREV; /*this points to the previous state it came from*/ struct State *NEXT; /*this points to the next state in the linked list*/ int cost; /*Number of moves d

我有一个名为State的结构:

typedef struct State{
    char alphabets[2][6]; 
    struct State *PREV; /*this points to the previous state it came from*/
    struct State *NEXT; /*this points to the next state in the linked list*/
    int cost; /*Number of moves done to get to this position*/
    int zero_index;/*this holds the index to the empty postion*/
} State;
下面是我的memAllocator()方法:

} 这是我的主要方法

main(){
State *start_state_pointer=memAllocator();
State start_state;
start_state.zero_index=15;
start_state.PREV = NULL;
start_state.alphabets[0][0]='C';
start_state.alphabets[0][1]='A';
start_state.alphabets[0][2]='N';
start_state.alphabets[0][3]='A';
start_state.alphabets[0][4]='M';
start_state.alphabets[0][5]='A';
start_state.alphabets[1][0]='P';
start_state.alphabets[1][1]='A';
start_state.alphabets[1][2]='N';
start_state.alphabets[1][3]='A';
start_state.alphabets[1][4]='L';
start_state.alphabets[1][5]='_';
start_state_pointer=&(start_state);
/*start_state=*start_state_pointer;*/
}

我认为语句start\u state\u pointer=&(start\u state);只是将指针start_state_指针分配给state start_state期间创建的少量临时空间,而不是分配给我分配的空间。 但是当我尝试注释掉的语句start\u state=*start\u state\u指针时,我会使用指针并将空间分配给start state。这给了我一个分段错误


我刚开始在C。有人能帮我吗

您的
memAllocator
main
函数没有明确的返回类型。这种风格的代码已经被弃用超过10年了。C中的函数应始终具有返回类型。对于
main
,返回类型应为
int
,对于
memAllocator
函数,返回类型应为
State*

第二个问题是为
状态
结构分配空间,然后填充不同的
状态
结构,并使用
start\u State\u pointer=&(start\u State)覆盖指向先前分配的
状态
结构的指针

要使用刚才分配的内存,您需要使用如下内容:

State *start_state = memAllocator();
start_state->zero_index = 15;
start_state->PREV = NULL;
start_state->alphabets[0][0] = 'C';
// etc.

不需要创建两个
状态
结构。当您使用
状态start\u start时在原始代码中,您正在创建一个名为自动存储的结构。这意味着此结构的空间将自动分配,并在其声明的范围结束时自动为您解除分配。如果您获取此结构的地址并将其传递给程序的其他部分,那么您将传递指向解除分配的结构的指针,这可能就是程序崩溃的原因。

您想做什么?这一行,
start\u state\u pointer=&(start\u state)
,扔掉指向已分配内存的唯一指针,永久丢失。我试图编译您的代码,但出现了大量错误:我基本上是试图用状态填充我创建的内存。i、 e.我想将start_状态及其包含的所有内容复制到新分配的内存中。
State *start_state = memAllocator();
start_state->zero_index = 15;
start_state->PREV = NULL;
start_state->alphabets[0][0] = 'C';
// etc.