2014-01-24 68 views
2

我正在与C.你能告诉我,如果这是正确的方式来分配内存的struct其中包含一个字符串?字符串动态分配在C

struct _TipoLista { 
    char info[10]; 
    struct _TipoLista *next; 
}; 
typedef struct _TipoLista *TipoLista; 

... 

TipoLista el; 
el = malloc(sizeof(TipoLista)); 

如果试图以这种方式创建一个列表,当我尝试插入第二个元素的时候总是会出错。但是,如果我将“信息”从char[10]更改为int,我的代码始终有效。

回答

2
el = malloc(sizeof(*el)); 

el = malloc(sizeof(struct _TipoLista)); 

或同时声明结构

struct _TipoLista { 
    char info[10]; 
    struct _TipoLista *next; 
}obj1; 

在在前两种情况下初始化它的动态内存分配,第三是静态内存分配

1
el = malloc(sizeof(*el)); 

TipoLista有一个指针的大小,所以这不是你真正想要的。

0

你应该尝试以下

el = malloc(sizeof(struct _TipoLista)); 

或者为这个结构定义一个typedef。

0

你正在尝试做一个typedef,即结构的别名。的typedef又意味着“从这时开始*结构_TipoLista *将被称为* TipoLista

如果你想有型“结构_TipoLista”的链表,那么这可能帮助。

struct _TipoLista { 
    char info[10]; 
    struct _TipoLista *next; 
}; 
typedef struct _TipoLista TipoLista; 

int main() 
{ 
TipoLista *Tptr = malloc(sizeof(TipoLista)); 
/** Rest is history */ 
} 
0

希望这可能是有用的:

typedef struct { 
    char info[10]; 
    struct _TipoLista *next; 
} TipoLista; 


TipoLista* construct_lista() 
{ 
    TipoLista* ret = malloc(sizeof(TipoLista)); 
    ret->next = NULL; 
    return ret; 
} 

void destruct_lista(TipoLista* lista) 
{ 
    TipoLista* next; 
    while (lista != NULL) 
    { 
     next = lista->next; 
     free(lista); 
     lista=next; 
    } 
} 


void insert_into_list(TipoLista* lista, char* element) 
{ 
    while (lista->next != NULL) 
     lista = lista->next; 

    lista->next = construct_lista(); 
    strcpy(lista->next->info, element); 
} 
+0

-1,这倒像是Java的。当你有一个指向它的指针时,你不能使用'.'来访问结构的字段,你必须使用' - >'。另外,在解引用它们之前,'NULL'检查指针是一种很好的做法。 – unwind

+0

@unwind:你说得对,“ - >”...对不起 – Exceptyon