指向包含结构的struct的指针

时间:2011-05-04 17:03:03

标签: c pointers thread-safety

我正在编写一个多线程应用程序,并希望传递指向结构的指针。

结构中的结构是否需要进行malloced,或者如果外部结构是malloced,它是否会阻止内部结构在传递指针时被删除或丢失?

我问的结构是

struct thread_data
{
    position starttile;
    position destinationtile;
    char *message;
};

其中position是一个不包含指针的结构本身

3 个答案:

答案 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包含指向结构的指针,那么它们将需要在某处分配。

如果您的外部结构包含实际结构,则会更容易。即使如此,使用指针,只需确保在内部结构完全分配之前,永远不要将指向外部结构的指针提供给其他线程 - 这样可以避免分配时的线程问题。解除分配将需要适当的关注,以确保独家访问。