首页 > 解决方案 > 如何释放分配的空间

问题描述

我正在做一项家庭作业,该作业应该对文件中的每一行以及行的内容进行编号。我的老师简要提到了如何在分配空间后释放和删除我们创建的空间,但我找不到他在课堂上提供的任何示例。我将如何释放代码中的空间?

#include <stdio.h>
#include <stdlib.h>
#include "read_lines.h"
#include <string.h>


void read_lines(FILE* fp, char*** lines, int* num_lines) {

  char letter;
  int size = 0;
  int sizeOfLines[10000];
  int index = 0;
  *num_lines = 0;

  for(size = 0; !feof(fp);size++){
    letter = fgetc(fp);
    size++;
    if (letter == '\n') {
      sizeOfLines[index] = size;
      index++;
      size = 0;
        (*num_lines)++;
      }
    }

  while(!feof(fp)){
    letter = fgetc(fp);
    size++;
    if(letter == '\n'){
      sizeOfLines[index] = size;
      index++;
      size = 0;
      (*num_lines)++;
    }
  }
  (*lines) = (char**)malloc(*num_lines *sizeof(char*));
  int i = 0;
  while (i<*num_lines){
        (*lines)[i] = (char *) malloc(sizeOfLines[i] + 1 * sizeof(char));
        i++;

  }

  rewind(fp);
  i = 0;
  while (i < *num_lines) {
    fgets((*lines)[i], (sizeOfLines[i] + 1), fp);
    i++;
  }

标签: cpointersfree

解决方案


您调用函数将行读入文件。好的。完成该功能后,请调用此功能以释放行。

void free_lines(char** lines, int num_lines)
{
    while (num_lines --> 0)
        free(lines[num_lines]);
    free(lines);
}

不要只是提升此代码。确保你理解它。

假设您的调用read_lines看起来像这样:

    char **lines = NULL;
    int num_lines = 0;
    FILE *fp = fopen(...)
    if (fp)
    read_lines(fp, &lines, &num_lines);
    fclose(fp);

你会这样调用free_lines

    free_liens(lines, num_lines);

免责声明:我没有测试过您的 read_lines,也无意这样做。


推荐阅读