我正在编写一个多线程应用程序,并希望传递指向结构的指针。
结构中的结构是否需要进行malloced,或者如果外部结构是malloced,它是否会阻止内部结构在传递指针时被删除或丢失?
我问的结构是
struct thread_data
{
position starttile;
position destinationtile;
char *message;
};
其中position是一个不包含指针的结构本身
答案 0 :(得分:6)
如果struct包含子结构,那么它通常都是一块内存。所以没有单独的分配。
如果struct包含指向结构的指针,那么我以前的注释将不适用。在这种情况下,它取决于你在做什么。
如果您考虑过发布一小段代码,那么人们就会清楚您的想法。
答案 1 :(得分:3)
如果你这样做,你可能会发现更容易管理内存
struct X {
struct Y data;
};
struct X* var = malloc(sizeof(struct X));
而不是
struct X {
struct Y* pData;
};
struct X* var = malloc(sizeof(struct X));
var->pData = malloc(sizeof(struct Y));
答案 2 :(得分:1)
如果您的外部struct
包含实际结构,则无需单独分配它们。
如果您的外部struct
包含指向结构的指针,那么它们将需要在某处分配。
如果您的外部结构包含实际结构,则会更容易。即使如此,使用指针,只需确保在内部结构完全分配之前,永远不要将指向外部结构的指针提供给其他线程 - 这样可以避免分配时的线程问题。解除分配将需要适当的关注,以确保独家访问。