Указатель на структуру, содержащую структуры - PullRequest
1 голос
/ 04 мая 2011

Я пишу многопоточное приложение и хотел бы передать указатели на структуру.

Нужно ли использовать структуры в структуре неправильно или если внешняя структура имеет неправильную структуру, это предотвратит удаление или потерю внутренних структур при передаче вокруг указателя?

Структура, о которой я спрашиваю, это

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

где position - это сама структура, которая не содержит указателей

Ответы [ 3 ]

6 голосов
/ 04 мая 2011

Если структура содержит дочерние структуры, то обычно это все один блок памяти.И поэтому не было бы отдельного распределения.

Если структура вместо содержит указатели на структуры, мой предыдущий комментарий не будет применяться.В этом случае это зависит от того, что вы делаете.

Если бы вы решили опубликовать небольшой кусочек кода, чтобы люди могли понять, что вы имели в виду.

3 голосов
/ 04 мая 2011

Вам, вероятно, будет легче управлять памятью, если вы сделаете

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));
1 голос
/ 04 мая 2011

Если ваш внешний struct содержит фактические структуры, нет необходимости выделять их отдельно. Если ваш внешний struct содержит указатели на структуры, то их нужно где-то разместить.

Это проще, если ваша внешняя структура содержит реальные структуры. Тем не менее, с помощью указателей просто убедитесь, что вы никогда не сделаете указатель на внешнюю структуру доступным для других потоков, пока внутренние структуры не будут полностью распределены, что позволяет избежать проблем с выделением потоков при распределении. Для отмены размещения потребуется соответствующий уход для обеспечения исключительного доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...