【发布时间】:2013-10-02 15:13:11
【问题描述】:
我想我的问题很简单。是的,我知道堆栈溢出有几个与链表/分段错误相关的问题,但我认为这些问题与未初始化的指针有关,而我认为我的问题与字符串有关。
我有一个链表,其节点结构由两个变量组成:指向next 节点的链接和(!)string。
我的问题:我如何释放节点的内存(记住它是mallocated)而不会因free()ing 字符串而导致分段错误?
在浏览与free() 和strings 相关的其他问题时,我的印象是没有必要free() 他们。但是如何释放其中包含string 嵌套字符串的struct?
除了destroyList() 之外,我正在实现的链表函数似乎都在工作,它释放了传递给函数的节点的所有已分配内存以及所有后续节点。
下面是实现:
void destroyList(struct listNode *pNode){
if(pNode->next != null){
destroyList(pNode->next);
}
free(pNode);
}
这是listNode 结构:
struct listNode{
char addr[MAX_ADDR_LENGTH];
struct listNode *next;
};
【问题讨论】:
-
是否有可能在某个时候将超过 MAX_ADDR_LENGTH 的字符写入节点?可能是错误的,但这可能会弄乱你的指针。另外,您是否在创建时将其初始化为 null ?在这方面也可以看到 calloc..
标签: c pointers linked-list segmentation-fault