我对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()
时,它可以正常工作一段时间,但后来我注意到程序位置似乎被随机覆盖。
关于可能导致这些错误的任何想法?
谢谢!
答案 0 :(得分:1)
在执行malloc()
之前,您需要执行realloc()
。 realloc()
更改已分配的内存。您应首先将lines
内存区域初始化为NULL
,然后realloc()
首次malloc()
执行realloc()
,因为malloc()
将会NULL
运行如果指针是malloc()
。
请参阅此writeup on realloc()。
因此,在calloc()
之后添加一行,将该区域初始化为null或使用malloc()
代替{{1}}。
请参阅此writeup on calloc()。