我的问题需要将固定数组大小转换为动态内存分配。我尝试了各种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*
答案 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代码需要这样做。)