释放calloc'd内存时出错:免费无效下一个大小(快)

时间:2017-11-04 04:26:47

标签: c free calloc

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

ye. wee.\n

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

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

我已经检查了gdb中的程序,当它点击免费(密钥)时会导致以下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

我仍然不习惯使用内存分配,所以这让我很困惑。

1 个答案:

答案 0 :(得分:2)

第一次评估defn[i-x] = definition[i];时,x的值为i+1,因此i-x为-1。