realloc 设置所有索引相同的数据

Realloc sets all indexes the same data

FILE *fd;
char **lines = NULL;

int err = fopen_s(&fd, filename, "r");

if (err != 0) {
    printf("Nao foi possivel abrir o ficheiro %s ...\n", filename);
    return;
}

char nextline[1024];
int counter = 0;

while (fgets(nextline, sizeof(nextline), fd)) {
    if (strlen(nextline) < 1) {
        continue;
    }

    lines = (char**)realloc(lines, (counter+1) * sizeof(*lines));
    lines[counter] = nextline;



    counter++;
}

fclose(fd);
*numElements = counter;

//IN HERE IT SHOWS ME THE SAME FOR ALL THE PLAYERS FROM 300 DIFFERENT PLAYERS WHY IS THAT???
printf_s("\n\n%s\n", lines[299]);
printf_s("%s\n", lines[298]);

我想不通这个问题。
首先 realloc 删除了旧缓冲区,现在它实际上是将相同的数据复制到所有 300 个索引。

有人可以帮我吗?

变量lines基本上是一个指针数组。数组中的所有指针都指向同一个 nextline 数组的第一个元素。

作业

lines[counter] = nextline;

仅分配 指针 ,它不执行深度复制或复制当前在 nextline.

中的字符串

您可能想使用 strdup 函数而不只是分配指针:

lines[counter] = strdup(nextline);

记得 free 稍后 strdup 的字符串。

如果您知道数组和指针如何交互,一个简单的 rubber duck debugging 应该可以在几秒钟内告诉您这一点。如果你不明白你只是在分配指针,那么你需要回到你的教科书或讲义。