c - 释放 calloc 内存时出错 : free invalid next size (fast)

标签 c free calloc

我正在编写一个函数来从文件中获取文本,但当我尝试释放一些 calloc 的内存时遇到了问题。

ye. wee.\n

当传递一个包含上述内容的txt文件时,该函数为ye的3个字符分配内存。并将它们复制进来。然后为其他 6 个字符分配内存并将它们复制进来。然后打印相应的字符串并释放内存。

testFor() 是一个返回第一个 '.' 索引的函数在一个字符串中。

我已经在 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。

关于c - 释放 calloc 内存时出错 : free invalid next size (fast),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47107376/

相关文章:

c - 无需轮询即可读取多条 UDP 消息

c - Linux 内核模块,防止 usbcore 在探测后注册另一个接口(interface)

c - 如何在 Windows 上安装 GTK+ 3.0?

c - 如何释放邻接链表分配的内存?

c - 为什么这么多标准 C 函数篡改参数而不是返回值?

反复调用 calloc 似乎会破坏早期调用的数据

c - 如何在C中添加分钟

c - 释放分配的内存会产生段错误

c++ - 为什么必须在C++中显式类型转换malloc和calloc?

calloc() 和 NULL