C动态增长数组的realloc问题



我想在C中实现动态增长数组。我从文件中读取单词到char**数组,当数组满时,其大小增加2。但是当我重新分配内存时,数组的前两个元素就会丢失。我试过使用lines=realloc((,但它崩溃了。我做错了什么?

test.txt:

test1
test2
test3
test4
test5
test6
test7
test8
test9 (no end of line) 

我的输出:

─
đ%
test3
test4
test5
test6
test7
test9

代码:

#include <stdio.h>
#include <malloc.h>
int size = 8;
char **read(FILE *input, char **lines, int *lSize) {
for (int i = 0; !feof(input); i++) {
*lSize += 1;
if (*lSize > size) {
realloc(lines, (size *= 2) * sizeof(char *));
for (int j = (*lSize) - 1; j < size; j++) {
lines[j] = (char *) malloc(1024 * sizeof(char));
}
}
fscanf(input, "%s", lines[i]);
}
return lines;
}
int main(){
FILE *file = fopen("test.txt", "r");
if (file == NULL) {
return -1;
}
char **lines = malloc(size * sizeof(char *));
for (int i = 0; i < size; ++i) {
lines[i] = malloc(1024 * sizeof(char));
}
int lsize = 0;
read(file, lines, &lsize);
printf("lSize:%dn", lsize);
printf("size:%dn", size);
for (int i = 0; i < lsize; ++i) {
printf("%sn", lines[i]);
}

for (int i = 0; i < size; ++i) {
free(lines[i]);
}
free(lines);
return 0;
}

给定char **read(FILE *input, char **lines, int *lSize)

realloc(lines, (size *= 2) * sizeof(char *))的作用是什么?

它改变了lines指向的内存块的大小,可能是通过移动它。这就是它返回新指针的原因。仅仅将新指针分配回lines(本身(并没有多大帮助,因为这只会更新该函数中的局部变量lines

但幸运的是,lines也从函数中返回。但是它的返回值在main中被忽略了,所以在read返回之后,main中的lines可能是一个伪指针。也主要做CCD_ 9。

最新更新