[英]App gives segmentation fault while freeing memory
我有這兩個文件:
測試
#ifndef TEST_H
#define TEST_H
typedef struct _vertex_node
{
double x;
double y;
struct _vertex_node *next;
} vertex_node;
static void add_vertex(vertex_node **node, const double x, const double y);
static void dty_vertex(vertex_node **node);
#endif // TEST_H
測試
#include <stdio.h>
#include <stdlib.h>
#include "test.h"
static void add_vertex(vertex_node **node, const double x, const double y)
{
if(NULL == (*node))
{
(*node) = malloc(sizeof(vertex_node));
(*node)->x = x;
(*node)->y = y;
(*node)->next = NULL;
}
else
add_vertex(&((*node)->next), x, y);
}
static void dty_vertex(vertex_node **node)
{
if(NULL != (*node)->next)
dty_vertex(&((*node)->next));
free(*node);
}
int main(int argc, char **argv)
{
vertex_node *node;
vertex_node *iterator;
add_vertex(&node, 0, 0);
add_vertex(&node, 1, 0);
add_vertex(&node, 1, 1);
add_vertex(&node, 0, 1);
iterator = node;
while(NULL != iterator)
{
printf("x: %f, y: %f\n", iterator->x, iterator->y);
iterator = iterator->next;
}
dty_vertex(&node);
return 0;
}
我正在使用gcc -Wall -ggdb test.c -o test
命令進行編譯。
當我嘗試運行它時,釋放內存時出現段錯誤,這是怎么回事?
您需要初始化node
:
vertex_node *node = NULL;
如果不這樣初始化,請檢查:
if(NULL == (*node))
{ /* */ }
第一次調用將失敗,並且將執行以下部分:
add_vertex(&((*node)->next), x, y);
在node
具有任意值。 此時,或者嘗試釋放節點時(如果不走運),您可能會遇到段錯誤。
堆棧上的變量未初始化為零。 請嘗試以下操作:
vertex_node *node = NULL;
頂點節點應顯式設置為NULL。 您得到的錯誤可能是由於釋放了未分配的內存。
您必須在dty_vertex
檢查*node
本身是否為NULL
。
您正在釋放非堆內存。 該函數退出時,將釋放堆棧內存。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.