动态内存分配C.

时间:2015-02-26 14:43:01

标签: c arrays linked-list

我的问题需要将固定数组大小转换为动态内存分配。我尝试了各种calloc,malloc和relloc语句,但似乎没有任何工作。我想即使是一个void *数据指针也没用。

请将此代码转换为动态内存,以便稍后调整数组大小。另外要添加我正在使用链表,所以这个数组是一个节点指针。

Node *lists[100]  //this does my job 
lists[listNo] = NULL; 

如果我想使用malloc:

Node *lists = (Node) malloc(100*sizeof(Node));
lists[listNo] = NULL; // gives me error when I use malloc or calloc and the error is assigning Node from void*

2 个答案:

答案 0 :(得分:5)

问题是列表应该在使用malloc时定义为指向数组的指针。

 Node **lists = malloc(100*sizeof(Node*));
 lists[listNo] = NULL;

答案 1 :(得分:3)

基于你的断言:

Node *lists[100]

...完成工作,那就是100个指针的数组(键入Node)。通常的可变长度版本是:

Node **lists; /* points to first pointer in dynamic array */
int lists_size; /* you need a variable to hold the size */

如果数组非常大,请使用size_t中的<stdlib.h>而不是int,但int更容易用于小数组和索引变量。用以下内容分配:

lists_size = 100; /* replace 100 with a computed size */
lists = (Node**)calloc(lists_size, sizeof (Node*));

在代码中使用lists_size代替100,其他所有内容都相同。使用calloc()而不是malloc()会将分配的内存清除为二进制零,从而无需循环在每个实际实现上存储NULL指针。 (从技术上讲,C标准并不要求NULL为零,或者至少不是我最后一次看,但是几兆吨的Unix加Windows代码需要这样做。)