删除二维链表数组,如何?
deleting 2D Linked List array, How to?
我有这样的函数来删除我的二维结构,但它不是太快,我想有一个更快的方法来做到这一点(比如 memset 或其他东西),任何想法将不胜感激;)
void freeAlllistNode(LISTNODEPTR *sPtr[][10])
{ LISTNODEPTR temp;
for (char i = 0; i<19; i++){
for (char di = 0; di<10; di++){
while (sPtr[i][di] != NULL){
temp = *(sPtr[i] + di);
*(sPtr[i] + di) = temp->next;
free(temp);
}
}
}
}
这是我的结构定义,以备不时之需
typedef struct listNode{
char* val ;
struct listNode *next;
}LISTNODE;
using LISTNODEPTR = LISTNODE*;
没有。 memset
在任何情况下都不能替代 malloc/free。他们做完全不同的事情。 memset
可以以某种方式替代 malloc/free 的提议是对动态内存和动态范围分配工作原理的根本误解。
唯一可以远程实现类似功能的是具有自定义分配的标准 C++ 库容器 class。即std::list
、std::vector
等,本手册link列表实现的none
标准 C++ 库容器采用可选的模板参数来指定自定义分配器 class。必须编写一个自定义分配器 class 来管理容器的动态内存分配,类似于分配大块内存,然后为放入容器中的每个值分段分配它们。然后,当容器被销毁时,所有分配的内存都可以在短短 delete
秒内处理掉。
当然,也可以通过手动 link 列表实现来实现此方法。但是不管怎么说都是很多工作,而且只要所有的工作都必须完成,为什么还要浪费时间在手动 link 列表上,只需使用 std::list
.
我有这样的函数来删除我的二维结构,但它不是太快,我想有一个更快的方法来做到这一点(比如 memset 或其他东西),任何想法将不胜感激;)
void freeAlllistNode(LISTNODEPTR *sPtr[][10])
{ LISTNODEPTR temp;
for (char i = 0; i<19; i++){
for (char di = 0; di<10; di++){
while (sPtr[i][di] != NULL){
temp = *(sPtr[i] + di);
*(sPtr[i] + di) = temp->next;
free(temp);
}
}
}
}
这是我的结构定义,以备不时之需
typedef struct listNode{
char* val ;
struct listNode *next;
}LISTNODE;
using LISTNODEPTR = LISTNODE*;
没有。 memset
在任何情况下都不能替代 malloc/free。他们做完全不同的事情。 memset
可以以某种方式替代 malloc/free 的提议是对动态内存和动态范围分配工作原理的根本误解。
唯一可以远程实现类似功能的是具有自定义分配的标准 C++ 库容器 class。即std::list
、std::vector
等,本手册link列表实现的none
标准 C++ 库容器采用可选的模板参数来指定自定义分配器 class。必须编写一个自定义分配器 class 来管理容器的动态内存分配,类似于分配大块内存,然后为放入容器中的每个值分段分配它们。然后,当容器被销毁时,所有分配的内存都可以在短短 delete
秒内处理掉。
当然,也可以通过手动 link 列表实现来实现此方法。但是不管怎么说都是很多工作,而且只要所有的工作都必须完成,为什么还要浪费时间在手动 link 列表上,只需使用 std::list
.