Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
释放calloc'时出错;d内存:释放无效的下一个大小(快速)_C_Free_Calloc - Fatal编程技术网

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

释放calloc'时出错;d内存:释放无效的下一个大小(快速),c,free,calloc,C,Free,Calloc,我正在编写一个从文件中获取文本的函数,当我尝试释放一些calloc'd内存时遇到了一个问题 ye. wee.\n 当传递包含上述内容的txt文件时,该函数将为ye的3个字符分配内存。并将其复制到。然后为其他6个字符分配内存并将其复制到中。然后打印相应的字符串并释放内存 testFor()是一个函数,它返回字符串中第一个“.”的索引 我已经在gdb中检查了该程序,当它点击free(键)时,它会导致以下错误(抱歉,还不能嵌入图像) //以上更多信息 while((fgets(第256行,sourc

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

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

testFor()是一个函数,它返回字符串中第一个“.”的索引

我已经在gdb中检查了该程序,当它点击free(键)时,它会导致以下错误(抱歉,还不能嵌入图像)

//以上更多信息
while((fgets(第256行,source_fp))!=NULL){
如果(第[0]行=='\n'){
if(pflag){
int first=testFor(定义);
int second=strlen(定义);
printf(“%d%d\n”,第一,第二);
key=calloc(first+1,sizeof(char));
defn=calloc((第二个-(第一个+1)),sizeof(字符));
对于(i=0;i<(第一个+1);i++){
键[i]=定义[i];
}
int x=i+1;
对于(;iprintf(“>%s%s当第一次计算
defn[i-x]=定义[i];
时,
x
具有值
i+1
,因此
i-x
为-1。

i-(i+1)
绝对是-1是的。这对我来说相当尴尬。作为一个混乱控制的问题,考虑到不太可能有人会发现这个问题很有用,我应该删除这个问题吗?我会留下它,因为可能有人会犯类似的错误。我认为for-for循环是不对的……您为键分配了三个字符,而您将定义中的3个字符复制到其中。因此,密钥不会以null结尾。您需要分配一个额外的字符来保存null结尾符。
//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