如何在C中取消分配指向结构的指针数组?

问题描述 投票:0回答:1

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

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

这里是代码链接

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

我需要做,所以printList函数在释放后将不会打印books数组。

此外,您对如何更有效地管理内存有任何建议吗?

谢谢。

c memory-management struct dynamic-memory-allocation
1个回答
0
投票

代码看起来像这样:

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);
}

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

free(booksList);

[另外,请注意,我从malloc中删除了演员表。 This post对为什么不应该投放它有很好的建议。


0
投票

您分配内存的方法不正确。当您为每本书使用结构时。您应该为每个记录分别分配内存。因为您可能不会一次存储所有书籍记录。例如:您有最大编号。共有100本书,但现在您有10本书的信息。用您的方法,将浪费90本书。

This post

删除记忆:

void allocList(struct Book **myArray, int booksAmount) {
        int i;
        for(i = 0;i < booksAmount; i ++) {
            *myArray = (struct Book*) malloc(sizeof(struct Book));
        }
}
© www.soinside.com 2019 - 2024. All rights reserved.