【发布时间】:2016-08-13 09:34:00
【问题描述】:
我对已发布的解决方案之一有疑问 - 此线程上已接受的解决方案: https://stackoverflow.com/a/4982586/5854333.
我会留下评论而不是开始一个新的问题线程,但我目前没有必要的经验。该程序确实按承诺运行,并且与我打算实际实现的程序相似,但我仍然对其中是否可能存在细微的内存问题感到困惑。
例如,在部分中:
void addStringToHolder(stringHolder * holder, const char * string) {
char ** newStrings = realloc(holder->strings, newStringCount * sizeof(char *));
if (newStrings != NULL) {
holder->strings = newStrings;
}
}
(我们正在使用结构体处理这个函数)
typedef struct {
int numberOfStrings;
char ** strings;
}stringHolder;
双指针strings 真的可以在这个函数中修改吗? 我认为我们总是必须传入一个指向我们想要修改的东西的指针,而不是东西本身。如果我们想修改双指针,我们不是必须传入一个三指针吗?
当然,我们首先也传递了一个指向结构体的指针,那么这样可以吗?我想我迷失在所有这些指针中。稍微清楚一点会很有帮助。希望理解这个案例能让我理解其他案例。
【问题讨论】:
-
您通过将指针传递给结构来告诉函数:嘿,内存中的那个地方有一些东西,去那里弄乱你想要的东西。确实如此。
-
只是为了确定,
const char *的第二个参数string是否应该未被使用?它正在被传入,但我没有看到变量string的任何文字用法。 -
@EugeneSh。因此,传入指向结构的指针允许我们修改结构的任何元素。好像有道理,谢谢现在,我们为什么要传递一个指向结构的双指针,就像在
void createNewStringHolder(stringHolder ** holder) { (*holder) = malloc(sizeof(stringHolder)); }中一样?大概我们正在改变分配给结构的内存大小,但是当它在主函数中声明时,它不是已经从它的定义中获得了这个大小吗?这有什么变化? -
@8protons 我只添加了我不理解的部分功能,以使我的问题更具可读性。您可以在链接中看到更完整的上下文。
-
它是一个双指针,因为它旨在指向多个字符串。每个字符串由一个指针指向,而一堆字符串由一堆指针指向,所以你需要一个指向指针的指针。