gpt4 book ai didi

c - 释放对象错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:36:58 25 4
gpt4 key购买 nike

我正在 mallocing 一个 C 字符串数组。释放后,出现如下错误:

Assembler(87536) malloc:对象 0x108500840 的 *** 错误:未分配正在释放的指针
*** 在malloc_error_break 设置断点调试

这是为什么呢?我很确定我正在正确执行 malloc。我在内存管理方面非常有经验,但我不确定为什么这会给我一个错误。该数组应包含三个字符串,每个字符串长度为 2 个字符。

下面是我分配数组的方式:

char **reg_store;
reg_store = malloc(3 * (sizeof(char*)));
if (reg_store == NULL) {
fprintf(Out, "Out of memory\n");
exit(1);
}

for (int i = 0; i < 3; i++) {
reg_store[i] = malloc(2 * sizeof(char));
if (reg_store[i] == NULL) {
fprintf(Out, "Out of memory\n");
exit(1);
}
}

这是我释放它的方式:

for (int i = 0; i < 3; i++) {
free(reg_store[i]);
}
free(reg_store);

这是我之间的内容:

// Keeps a reference to which register has been parsed for storage

int count = 0;
char *reg = NULL;
char *inst_ptr // POINTS TO SOME STRING. EXAMPLE: $t2, $t1, $a0

while (1) {

// Parses the string in inst_ptr with dollar, comma and space as a delimiter.
reg = parse_token(inst_ptr, " $,\n", &inst_ptr, NULL);

if (reg == NULL || *reg == '#') {
break;
}

reg_store[count] = reg;
count++;
free(reg);
}

我在调用 parse_token 后打印出 reg 并且打印正确。我也在打印 reg_store[count] 并且它也正确打印出来。

最佳答案

你的问题在这里:

reg_store[count] = reg;
free(reg);

以后

free(reg_store[i]);

reg 已经被释放,你下次再释放它(不谈论以后使用它的问题)。修复此替换

reg_store[count] = reg;

strcpy(reg_store[count], reg);

或者按照评论中的建议,既然你知道它的两个字符,最好memcpy它:

memcpy(reg_store[count], reg, 2);

关于c - 释放对象错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7911213/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com