这里有一些背景...
/* grafo.h */
#define MAXTAMROTULO 30
typedef struct __TipoGrafo
{
int **Mat;
char **Rotulos;
unsigned MaxVertices;
} TipoGrafo;
bool CriaGrafo(TipoGrafo *, unsigned);
bool DestroiGrafo(TipoGrafo *);
/* grafo.c */
bool CriaGrafo(TipoGrafo *Grafo, unsigned max)
{
unsigned i, j;
Grafo->MaxVertices = max;
Grafo->Mat = (int **) malloc(max * sizeof(int *));
for (i = 0; i < Grafo->MaxVertices; i++)
{
Grafo->Mat[i] = (int *) malloc(max * sizeof(int));
for (j = 0; j < Grafo->MaxVertices; j++)
Grafo->Mat[i][j] = 0;
}
Grafo->Rotulos = (char **) malloc(Grafo->MaxVertices * sizeof(char *));
for (i = 0; i < Grafo->MaxVertices; i++)
{
Grafo->Rotulos[i] = (char *) malloc((MAXTAMROTULO + 1) * sizeof(char));
memset(Grafo->Rotulos[i], '\0', (size_t) sizeof(Grafo->Rotulos[i]));
}
return true;
}
bool DestroiGrafo(TipoGrafo *Grafo)
{
unsigned i;
for (i = 0; i < Grafo->MaxVertices; i++)
{
free(Grafo->Rotulos[i]);
free(Grafo->Mat[i]);
}
free(Grafo->Rotulos);
free(Grafo->Mat);
return true;
}
/* main.c */
#include <grafo.c>
int main()
{
TipoGrafo g;
CriaGrafo(&g, 10);
DestroiGrafo(&g);
return 0;
}
我试图通过在不再需要g
或以某种方式重用g
之后释放内存来避免某些内存泄漏。使用malloc
创建一个int二维数组和一个字符串数组可以正常工作。
完成数据结构后,我想free
为Mat
和Rotulos
动态分配的内存,但是在{{1}上调用DestroiGrafo(&grafo)
},我收到“公交车错误:10”。
我要释放某个地方的静态分配内存吗?