malloc分配的内存上的空闲释放总线错误

时间:2019-06-02 01:01:46

标签: c malloc free

这里有一些背景...

/* 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二维数组和一个字符串数组可以正常工作。

完成数据结构后,我想freeMatRotulos动态分配的内存,但是在{{1}上调用DestroiGrafo(&grafo) },我收到“公交车错误:10”。

我要释放某个地方的静态分配内存吗?

0 个答案:

没有答案