arrays - C 程序在释放 char * 数组中的指针后崩溃
问题描述
我是一名学习 C 的学生,我正在使用字符串数组和 malloc()。
我有以下代码应该使用动态创建的字符串加载字符串数组(静态创建)(如果我的术语与我拥有的代码不一致,请原谅/纠正我)。
问题是,一旦我释放该内存,就会出现以下错误:free(): invalid pointer
这是代码:
#include <stdio.h>
#include <stdlib.h>
#define RAM_SIZE 5
char* ram [RAM_SIZE];
int next_free_cell = 0;
void freeAndNullRam(){
for (int i = 0 ; i < RAM_SIZE ; i++){
printf("%d\n", i);
free(ram[i]);
ram[i] = NULL;
}
}
int main(int argc, const char *argv[])
{
for (int i= 0; i < RAM_SIZE; i++){
ram[i] = (char*)malloc(sizeof(char*)*5);
ram[i] = "aaaa";
}
for (int i= 0; i < RAM_SIZE; i++){
int empty = (ram[i] ==NULL);
if(!empty){
printf("%s\n", ram[i]);
}
}
freeAndNullRam();
for (int i= 0; i < RAM_SIZE; i++){
int empty = (ram[i] ==NULL);
printf("%d\n", empty);
}
return 0;
}
我知道问题肯定出在freeAndNullRam()
函数中(显然),但我不明白为什么。我的理解是,在编译时,会创建一个包含 5 个指向 char 数组的指针的数组,但要实际填充数组的单元格,我需要给malloc
它们一些内存。为什么当我释放数组中的指针时程序会抱怨,但当我给它们内存时却没有?
谢谢!
解决方案
ram[i] = "aaaa";
重新分配指向静态内存的指针a[i]
,丢弃malloc
. 稍后您将这些指针传递给free
,它失败了,因为它们不是*alloc
函数的结果。
用于strcpy
将字符串从静态内存复制到分配的目的地。
strcpy(a[i], "aaaa")
推荐阅读
- javascript - React Native:出错时将axios重定向到不同的地址
- xml - 使用 xsl 删除命名空间声明
- java - 与 Spring 和 Thymeleaf 的注销链接;发布错误
- angular - 茉莉花单元测试“在afterAll中引发了错误”
- dialog - Angular6 Material Dialog防止在按下回车时关闭
- neo4j - Neo4j - 图表数据
- google-oauth - 传递多个域以限制 - 在 Google OAuth 中的“hd”参数中
- c# - 如何在winforms图片框中每次单击鼠标时绘制小字符(x或z)
- python - pyenv 失败:ModuleNotFoundError: No module named '_ctypes' 错误
- php - 在雄辩的 laravel 中具有 AND 条件的产品过滤器