gpt4 book ai didi

c - 重新分配() : invalid next size: 0x00000000

转载 作者:行者123 更新时间:2023-11-30 19:46:02 24 4
gpt4 key购买 nike

针对我几个小时以来一直试图解决的问题寻求一些建议。该程序从文本文件中读取数据,并根据文件中给出的命令进行一些格式化。它似乎适用于我尝试过的每个文件,除了 2 个文件,这两个文件都相当大。这是有问题的代码:

    /* initalize memory for output */
output.data = (char**)calloc(1,sizeof(char*));

/* initialize size of output */
output.size = 0;

/* iterate through the input, line by line */
int i;
for (i = 0; i < num_lines; i++)
{
/* if it is not a newline and if formatting is on */
if (fmt)
{
/* allocate memory for a buffer to hold the line to be formatted */
char *line_buffer = (char*)calloc(strlen(lines[i]) + 1, sizeof(char));

if (line_buffer == NULL)
{
fprintf(stderr, "ERROR: Memory Allocation Failed\n");
exit(1);
}

/* copy the unformatted line into the buffer and tokenize by whitespace */
strcpy(line_buffer, lines[i]);
char* word = strtok(line_buffer, " \n");

/* while there is a word */
while (word)
{
/* if the next word will go over allocated width */
if (current_pos + strlen(word) + 1 > width)
{
/* make ze newline, increase output size */
strcat(output.data[output.size], "\n");
output.size++;
------->>>>> output.data = (char**)realloc(output.data, sizeof(char*) * (output.size + 1));

使用 gdb 我发现错误就在箭头指向它的行上,唯一的问题是我无法弄清楚它发生的原因。仅当正在格式化的文本文件很大(716 行)时才会发生这种情况,并且似乎会在最终迭代时发生(num_lines = 716)。任何想法将不胜感激。谢谢!

编辑:抱歉各位,应该提到我对此还很陌生!修复了一些错误。

最佳答案

最紧迫的问题是:

strncat(output.data[output.size], "\n", 2);

正如 BLUEPIXY 所指出的。目前 output.data[output.size] 是一个空指针 1,因此您无法 strncat 指向它。

要解决此问题,您可以分配一些空间:

output.data[output.size] = malloc(2);
if ( NULL == output.data[output.size] )
// error handling...

strcpy(output.data[output.size], "\n");

但是,可能还有另一种解决方案更适合您的其余功能,但您尚未展示。 (假设您在某处分配空间来存储单词)。

更新您的帖子并显示其余功能将会很有帮助。另请确保您发布的代码准确无误,因为 (output.size + ) 无法编译。我猜这是您在尝试将这些大箭头放在行上时引入的拼写错误。

1 实际上它的所有位都是零,这在常见系统上是空指针,但不保证在所有系统上都是如此。

关于c - 重新分配() : invalid next size: 0x00000000,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25026754/

24 4 0
文章推荐: c - strcpy函数: C
文章推荐: c# - 无法将 MyType 转换为 MyType