繁体   English   中英

如何在C中释放指向结构的指针数组?

[英]How to deallocate array of pointers to structures in C?

我需要动态分配结构数组并对其执行一些操作,然后释放内存。 当我尝试像那样释放内存时

for (int i = 0; i < booksAmount; i++) {
    free(myArray[i])
}

这是代码的链接

https://repl.it/@Xyrolle/Structures

我需要使 printList 函数在释放后不会打印书籍数组。

另外,您对如何更有效地管理内存有什么建议吗?

谢谢你。

代码如下所示:

struct Book *booksList = NULL;
allocList(&booksList, booksAmount);

void allocList(struct Book **myArray, int booksAmount) {
    *myArray = malloc(sizeof(struct Book) * booksAmount);
    printf("memory for %d books was allocated \n", booksAmount);
}

现在释放分配的内存。 您为书籍数组分配了一次内存,因此您只需要一个free

free(booksList);

另外,请注意我从malloc删除了演员表。 This post有很好的观点,说明为什么不应该投射它。

您分配内存的方法不正确。 当您为每本书使用结构时。 您应该为每条记录单独分配内存。 因为您可能无法一次存储所有书籍记录。 例如:您有最大数量。 书籍数量为 100,但现在您有 10 本书的信息。 随着你的接近,90本书的记忆将被浪费。

void allocList(struct Book **myArray, int booksAmount) {
        int i;
        for(i = 0;i < booksAmount; i ++) {
            *myArray = (struct Book*) malloc(sizeof(struct Book));
        }
}

戴尔内存:

for (i = 0; i < booksAmount; i ++) { 
    free(myArray[i]); 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM