释放 calloc 内存时出错:释放无效的下一个大小(快速)
Error when freeing calloc'd memory: free invalid next size (fast)
我正在编写一个函数来从文件中获取文本,但在尝试释放一些调用的内存时遇到了问题。
ye. wee.\n
当传递一个包含上述内容的txt文件时,函数为ye的3个字符分配内存。并将它们复制进来。然后为其他 6 个字符分配内存并将它们复制进来。然后打印相应的字符串并释放内存。
testFor() 是一个 returns 第一个 '.' 索引的函数在一个字符串中。
我已经在 gdb 中检查了该程序,当它点击 free(key) 时会导致以下段错误 error(抱歉,还不能嵌入图像)。
//more above
while ((fgets(line, 256, source_fp)) != NULL) {
if (line[0] == '\n') {
if (pflag) {
int first = testFor(definition);
int second = strlen(definition);
printf("%d %d\n", first, second);
key = calloc(first + 1, sizeof(char));
defn = calloc((second - (first + 1)), sizeof(char));
for (i = 0; i < (first + 1); i++) {
key[i] = definition[i];
}
int x = i + 1;
for (; i < second; i++) {
defn[i-x] = definition[i];
}
printf(">%s<\n", key);
printf(">%s<\n", defn);
free(key);
free(defn);
}
//more
我对使用内存分配还是陌生的,所以这让我很困惑。
第一次计算defn[i-x] = definition[i];
时,x
的值为i+1
,所以i-x
为-1。
我正在编写一个函数来从文件中获取文本,但在尝试释放一些调用的内存时遇到了问题。
ye. wee.\n
当传递一个包含上述内容的txt文件时,函数为ye的3个字符分配内存。并将它们复制进来。然后为其他 6 个字符分配内存并将它们复制进来。然后打印相应的字符串并释放内存。
testFor() 是一个 returns 第一个 '.' 索引的函数在一个字符串中。
我已经在 gdb 中检查了该程序,当它点击 free(key) 时会导致以下段错误 error(抱歉,还不能嵌入图像)。
//more above
while ((fgets(line, 256, source_fp)) != NULL) {
if (line[0] == '\n') {
if (pflag) {
int first = testFor(definition);
int second = strlen(definition);
printf("%d %d\n", first, second);
key = calloc(first + 1, sizeof(char));
defn = calloc((second - (first + 1)), sizeof(char));
for (i = 0; i < (first + 1); i++) {
key[i] = definition[i];
}
int x = i + 1;
for (; i < second; i++) {
defn[i-x] = definition[i];
}
printf(">%s<\n", key);
printf(">%s<\n", defn);
free(key);
free(defn);
}
//more
我对使用内存分配还是陌生的,所以这让我很困惑。
第一次计算defn[i-x] = definition[i];
时,x
的值为i+1
,所以i-x
为-1。