释放calloc'时出错;d内存:释放无效的下一个大小(快速)
我正在编写一个从文件中获取文本的函数,当我尝试释放一些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
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;
对于(;i printf(“>%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