gpt4 book ai didi

附加字符后无法释放分配的字符串内存

转载 作者:太空宇宙 更新时间:2023-11-04 01:37:11 25 4
gpt4 key购买 nike

我正在尝试将一个字符附加到一个字符串...不幸的是我无法释放字符串的内存,这导致字符串变得越来越长....因为它每次读取一个文件linie 将被添加到显然不应该发生的字符串中

char* append_char(char* string, char character)
{
int length = strlen(string);
string[length] = character;
string[length+1] = '\0';
return string;
}

我为像这样的字符串分配了内存

char *read_string = (char *)malloc(sizeof(char)*500);

调用函数append_char(read_string,buffer[0]); 并在构建整个字符串后释放它 free(read_string);

我假设一旦我调用 append_char() ,内存分配就会改变,这导致我无法掌握它。

编辑:这是使用 append_char() 的函数

char *read_log_file_row(char *result,int t)
{
filepath ="//home/,,,,,/mmm.txt";
int max = sizeof(char)*2;
char buffer[max];
char *return_fgets;

char *read_string = malloc(sizeof(char)*500);

file_pointer = fopen(filepath,"r");

if(file_pointer == NULL)
{
printf("Didn't work....");
return NULL;
}

int i = 0;

while(i<=t)
{
while(return_fgets = (fgets(buffer, max, file_pointer)))
{
if(buffer[0] == '\n')
{
++i;
break;
}

if(i==t)
{
append_char(read_string,buffer[0]);
}
}

if(return_fgets == NULL)
{
free(read_string);
return NULL;
/* return "\0";*/
}
if(buffer[0] != '\n')
append_char(read_string,buffer[0]);

}
fclose(file_pointer);
strcpy(result,read_string);
free(read_string);
return result;
}

最佳答案

  1. Dont cast the return value of malloc() in C .
  2. 确保在尝试追加之前将 read_string 初始化为空字符串,方法是设置 read_string[0] = '\0';
  3. 确保跟踪当前长度,这样您就不会尝试构建不适合缓冲区的字符串。分配 500 个字符意味着最大字符串长度为 499 个字符。

不确定在执行 free(read_string) 时会发生什么。听起来(从你对@Steve Jessop 的回答的评论)你做了这样的事情:

char *read_string = malloc(500);
read_string[0] = '\0'; /* Let's assume you do this. */
append_char(read_string, 'a'); /* Or whatever, many of these. */
free(read_string);
print("%c\n", *read_string); /* This invokes UNDEFINED BEHAVIOR. */

可能打印一个a,但这证明没有,因为这样做(访问已被释放的内存() :d) 您的程序正在调用未定义的行为,这意味着任何事情都可能发生。您不能由此得出结论,因为“测试”无效。您不能释放内存然后访问它。如果你这样做了,并且得到了一些“合理”/“正确”的结果,你仍然不能说 free():ing“没有用”。

关于附加字符后无法释放分配的字符串内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12456636/

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