c - 如何释放分配的空间
问题描述
我正在做一项家庭作业,该作业应该对文件中的每一行以及行的内容进行编号。我的老师简要提到了如何在分配空间后释放和删除我们创建的空间,但我找不到他在课堂上提供的任何示例。我将如何释放代码中的空间?
#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++;
}
解决方案
您调用函数将行读入文件。好的。完成该功能后,请调用此功能以释放行。
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,也无意这样做。
推荐阅读
- regex - 用逗号Python替换浮点数中的小数点
- javascript - 如何将以0开头的数字转换为与该值等效的字符串?
- rdbms - oracle 19c 数据库中如何创建用户
- c# - 如何使用 JSON.net 访问类的私有成员以生成 JSON Schema?
- javascript - 如何使具有相同类的多个下拉菜单的单个功能起作用?
- r - 从列表元素 r 中检索名称
- node.js - Nodejs:将行查询续集到postgis上的批量插入
- excel - 在excel中以百分比随机分配给员工的任务
- android - Android webview - shouldInterceptRequest 第一次没有被调用
- java - 如何从 spring-boot 应用程序中的 application.yml 文件中读取属性