gpt4 book ai didi

c - 对结构数组使用 realloc

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

我正在使用 realloc 来增加结构数组的内存量,但它似乎根本没有增加。我已经阅读了所有与此相关的帖子,但我无法弄清楚我做错了什么。这是我的代码:

struct fileInfo {
char name[MAXNAMLEN];
struct stat stbuf;
};

...

 struct fileInfo * newFileInfoPtr;
struct fileInfo * fileInfoPtr = (struct fileInfo *) realloc (NULL, sizeof (struct fileInfo));
// loop through directory to find all filenames
while ((direntPtr = readdir (dirFilePtr)) != NULL) {
(void) strcpy (direntName, filename);
(void) strcat (direntName, "/");
(void) strcat (direntName, direntPtr->d_name);
(void) strcat (direntName, "\0");
// check for vaild file
if (lstat (direntName, &st)) {
if (errno) {
(void) snprintf (buffer, BUFSIZ, STR_LSTAT_ERR);
perror (buffer);
}
exit (EXIT_FAILURE);
}

// reallocate memory for new fileInfo struct
newFileInfoPtr = (struct fileInfo *) realloc (fileInfoPtr,
(count+1) * sizeof (struct fileInfo));

// check for allocation success and increase count
if (newFileInfoPtr != NULL) {
(void) memset (newFileInfoPtr->name, NULL, MAXNAMLEN);
(void) strcpy (newFileInfoPtr->name, direntPtr->d_name);
newFileInfoPtr->stbuf = st;
fileInfoPtr = newFileInfoPtr;
count++;
} else {
if (errno) {
(void) snprintf (buffer, BUFSIZ, STR_ALLOC_ERR);
perror (buffer);
}
exit (EXIT_FAILURE);
}
...

direntPtr 是一个指向已打开目录的指针,我正在读取其中所有文件的名称。那部分工作正常,因为我可以打印出每个条目的名称。我的问题是我最终得到的最终结构数组。我知道使用 realloc 你可以根据旧数组分配内存,将返回值分配给新指针,用信息填充新指针,并将旧指针设置为新指针。但是,在完成循环后,fileInfoPtr 只是一个结构。我可以访问索引 0 处的字段,但之后它们都是空的。我打印出每个索引的内存地址,它们都是一样的......感谢您的帮助

最佳答案

您的newFileInfoPtr 指向新分配的数组的第一个条目。通过 memsetstrcpy 调用,您可以对 newFileInfoPtr->name 进行操作,这会覆盖第一个条目的名称。你要

(void) memset (newFileInfoPtr[count].name, NULL, MAXNAMLEN);
(void) strcpy (newFileInfoPtr[count].name, direntPtr->d_name);

访问索引 count 处的最后一个条目(递增之前)。

关于c - 对结构数组使用 realloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23982583/

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