Как я могу скопировать данные потока в массив перед завершением потока? - PullRequest
0 голосов
/ 16 февраля 2019

Я пытаюсь скопировать данные потока в C из метода, который ссылается на структуру потока, используя указатель на массив типа struct.

Я попытался использовать символ «&» для получения данных структуры, но при этом получил ошибку make.Я хотел бы скопировать данные всей структуры до завершения потока, который имеет тип структуры.

Person queue[300];
Person statsArray[300];
// the queue contains Person structs that have been given data already
//      within another method, prior to calling Leave().

typedef struct
{
struct timeval startChange;
struct timeval endChange;
struct timeval arrive;

int id;
int changingTime;
int storeTime;
int returning;
int numVisits;
int type;
int queuePos;
} Person;

void Leave(int queuePosition)
{
Person *aPerson = &queue[queuePosition];

statsArray[statsArrayIndex] = &aPerson;
statsArrayIndex++;
}

При компиляции я получаю ошибку "несовместимых типов при назначении типу" Person {aka struct} 'из типа' Person ** {aka struct **} '

1 Ответ

0 голосов
/ 16 февраля 2019

На основании сообщения об ошибке проблемная строка:

statsArray[statsArrayIndex] = &aPerson;

, где вы присваиваете Person** для Person.Если вы хотите скопировать каждый элемент структуры, то вы, вероятно, захотите:

statsArray[statsArrayIndex] = *aPerson;

Обратите внимание, что копирование структуры может быть дорогостоящим для массива больших структур.В зависимости от вашей программы может быть лучше / возможно изменить дизайн вашей программы, чтобы не делать копию и просто использовать указатель на нее (например, не позволяйте потоку уничтожать queue).

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