首页 文章

动态内存分配C.

提问于
浏览
0

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

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

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 回答

  • 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 */
    

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

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

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

  • 5

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

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

相关问题