我现在对指针感到非常困惑,所以我希望有人可以帮助我解决我犯错误的地方。
所以我想要一个指向某些结构的指针列表,以及一个具有指向所有结构的指针的变量。此列表还应稍后根据某些条件设置并更改这些条件。所以这里只是一个最小的例子:
typedef struct {
int a;
} path;
typedef struct {
path** all_paths;
} has_them;
int main(int argc, char** argv){
path* eno = malloc(sizeof(path));
path* second_path = malloc(sizeof(path));
has_them* all = malloc(sizeof(has_them)); //this list should have all of my allocated path pointers
all->all_paths = malloc(sizeof(path*)*10);
all->all_paths[0] = eno;
all->all_paths[1] = second_path;
printf("%p und %p\n", eno, second_path);
printf("%p und %p\n", all->all_paths[0], all->all_paths[1]);
all->all_paths[1] = NULL;
printf("%p und %p\n", eno, second_path);
printf("%p und %p\n", all->all_paths[0], all->all_paths[1]);
return (EXIT_SUCCESS);
}
所以我的问题是,在我的方法中我只有 all 变量,并且我想使用这个变量来更改我的初始指针(此处为 eno 和 secondary_path),因此将它们设置为 NULL 例如。 但是当我像上面那样做时,第二条路径的初始指针不为空,但保持不变......
最佳答案
在此设置中,将 eno
和 second_path
设置为 NULL 的唯一方法是:
eno = NULL;
second_path = NULL;
无法使用 one
及其内部指针进行操作,因为 one
不包含有关变量的信息 eno
和第二路径
。它仅包含 eno
和 second_path
也包含的内容的副本,即两个 malloc 结构的地址。修改副本对原件没有影响。
关于c - 从 C 中的指针列表中设置指针内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40073829/