圆形字符串数组中的C内存管理

时间:2014-02-01 21:00:30

标签: c arrays memory-management

我对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()时,它可以正常工作一段时间,但后来我注意到程序位置似乎被随机覆盖。

关于可能导致这些错误的任何想法?

谢谢!

1 个答案:

答案 0 :(得分:1)

在执行malloc()之前,您需要执行realloc()realloc()更改已分配的内存。您应首先将lines内存区域初始化为NULL,然后realloc()首次malloc()执行realloc(),因为malloc()将会NULL运行如果指针是malloc()

请参阅此writeup on realloc()

因此,在calloc()之后添加一行,将该区域初始化为null或使用malloc()代替{{1}}。

请参阅此writeup on calloc()