gpt4 book ai didi

c - 重新分配打印出错误

转载 作者:行者123 更新时间:2023-11-30 20:55:21 25 4
gpt4 key购买 nike

有人知道为什么这个重新分配代码不起作用吗?

 typedef struct symbol{  
char **arg;
int alloc_pam;
} TSymbolPtr

TSymbolPtr symb;

symb.arg = realloc(symb.arg, (70));

这是打印出来的错误:

*** glibc detected *** ./ifj: realloc(): invalid next size:     (SIGABRT)

代码示例:

希望它会更清楚。即使我认为它不会让我发布它,除非我添加更多详细信息,但很可能根本不会发送这个长代码:(

int rParams_n()
{
int result;
actToken = getNextToken();
result = rType();
i++;
if(i >= symb.alloc_pam){
printf("\trealloc \n");
symb.arg = (char **)realloc(symb.arg, (symb.alloc_pam) * 2); //error
symb.alloc_pam *= 2;
}
symb.arg[i] = malloc(sizeof(char*)* ((strlen(actToken.data)) + 1));
strcpy(symb.arg[i],actToken.data);
actToken = getNextToken();
...
}
/*
* <params> -> <type> "ID" <params_n>
* <params> -> "EPSILON"
*/
int rParams()
{
count=0;
if(symb.arg == NULL)
symb.arg = malloc(sizeof(char *) * (symb.alloc_pam));
int result;
// <params> -> "EPSILON" - params je prazdne, cekam ")"
if (actToken.typ == PZAVORKA) return ERR_CODE_SUCC; // vracim se do rFunc
// else jedu podle <params> -> <type> "ID" <params_n>

result = rType();
if (result != ERR_CODE_SUCC) return result;
symb.arg[i] = malloc(sizeof(char*) * ((strlen(actToken.data)) + 1));
strcpy(symb.arg[i], actToken.data);
count++;
i++;
actToken = getNextToken();
symb.arg[i] = malloc(sizeof(char*) * ((strlen(actToken.data)) + 1));
strcpy(symb.arg[i],actToken.data);
actToken = getNextToken();
// rule rParams_n
result = rParams_n();
..
}

提前致谢。

最佳答案

很难说,因为我们不知道 **arg 的当前大小,也不知道 (70) 的含义。

您的 **arg 用于分配动态指针数组,是吗?

如果您尝试在此处分配 70 char *,则需要使用 sizeof(char *) * 70:

symb.arg = (char **) realloc(symb.arg, (sizeof(char *) * (70)));

当然,这是假设 symb.arg 已经分配了 - 如果您使用上述方法来执行此操作,此时不太可能但不可能说。

然后我们可以使用动态分配的 char * 来分配缓冲区,这是您想要做的吗?

symb.arg[0] = (char *) malloc(sizeof(char) * (lengthofstring + 1));

例如。希望这会有所帮助,但就像我说的,很难说只有发布的程序的零星片段。

预计到达时间 - 抱歉,我的错误 - 我看到你对 malloc() 的调用,它们看起来很好,realloc 是相同的,唯一的区别是你传递了要调整大小的指针作为第一个参数 - realloc() 的第二个参数是本质上与 malloc() 的第一个也是唯一的参数相同。

关于c - 重新分配打印出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33745220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com