gpt4 book ai didi

循环字符串数组中的C内存管理

转载 作者:太空宇宙 更新时间:2023-11-04 03:49:57 24 4
gpt4 key购买 nike

我是 C 的新手,正在尝试创建一个缓冲区,将最后 N 行字符串输入存储在一个循环数组中。相关代码:

char ** lines;
int last_line=0;
int max_lines=0;
int max_line_length=1000;

void main()
{
... //set max_lines dynamically, among other setup.
int * len = malloc(sizeof(int));
char s[max_line_length];
lines=malloc(sizeof(char*) * max_lines);
while(getLine(s, len) != EOF) {
pushLine(s, *len);
}
}

void pushLine(char * s, int len)
{
//Here is where I am trying to replace the previous string in the array
char * t = realloc(lines[last_line], sizeof(char) * len);
memcpy(t,s,len);
lines[last_line++]=t;
last_line = last_line % max_lines;
}

如果我将 realloc() 替换为 malloc(),这将完美运行,但会造成内存泄漏。当我使用 realloc() 时,它可以正常工作一段时间,但后来我注意到程序位置似乎被随机覆盖。

关于可能导致这些错误的原因有什么想法吗?

谢谢!

最佳答案

在执行 realloc() 之前,您需要执行 malloc()realloc() 更改已经分配的内存。您应该先将 lines 内存区域初始化为 NULL 然后 realloc() 将执行 malloc()如果指针为 NULLrealloc() 将像 malloc() 一样运行,这是第一次。

查看此 writeup on realloc() .

因此在malloc() 之后添加一行,将区域初始化为null 或使用calloc() 而不是malloc()

查看此 writeup on calloc() .

关于循环字符串数组中的C内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21503605/

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