2015-09-01 3 views
-1

Я создаю динамически два массива структур (player1 и player1temp). Чем я хочу сделать некоторые вычисления с использованием данных из player1 и сохранить их на player1temp. Затем я хочу скопировать данные из массива player1temp в player1. Это хорошее решение?Удаление массива структур, изменение структуры адреса

struct team 
{ 
    int value1; 
    int value2; 
}; 


int main() 
{ 
    srand(time(NULL)); 
    team *player1=new team[5]; 
    for(int i=0; i<5; i++) 
    { 
     player1[i].value1=rand()%20; 
     player1[i].value2=rand()%20; 
     cout<<"Player1 index: "<<i<<"  "<<player1[i].value1<<"  "<<player1[i].value2<<"\n"; 
    } 
    team *player1temp=new team[5]; 
    cout<<"\n\n"; 
    for(int i=0; i<5; i++) 
    { 
     player1temp[i].value1=rand()%20; 
     player1temp[i].value2=rand()%20; 
     cout<<"Player1temp index: "<<i<<"  "<<player1temp[i].value1<<"  "<<player1temp[i].value2<<"\n"; 
    } 
    delete player1; 
    player1=player1temp; 
    cout<<"\n\n"; 
    for(int i=0; i<5; i++) 
    { 
     cout<<"Player1 index: "<<i<<"  "<<player1[i].value1<<"  "<<player1[i].value2<<"\n"; 
    } 
    return 0; 
} 
+0

Пожалуйста, не иметь дело с сырыми указателями самостоятельно. Используйте соответствующие [контейнеры] (http://en.cppreference.com/w/cpp/container) или [умные указатели] (http://en.cppreference.com/w/cpp/memory). –

+0

Похоже, ваш код работает, но вы не уверены в своем решении. Вероятно, это лучше было бы использовать [Обзор кода] (http://codereview.stackexchange.com/). – Steve

+0

C++ не имеет структур с 1985 года. –

ответ

0

Две ошибки:
delete должны быть delete[], если используется для массивов.
Оставшийся массив должен быть удален также до завершения программы.

вектор будет проще:

struct team 
{ 
    int value1; 
    int value2; 
}; 


int main() 
{ 
    srand(time(NULL)); 

    std::vector<team> player1(5); 

    for(int i=0; i<5; i++) 
    { 
     player1[i].value1=rand()%20; 
     player1[i].value2=rand()%20; 
     cout<<"Player1 index: "<<i<<"  "<<player1[i].value1<<"  "<<player1[i].value2<<"\n"; 
    } 

    std::vector<team> player1temp = player1; 

    cout<<"\n\n"; 
    for(int i=0; i<5; i++) 
    { 
     player1temp[i].value1=rand()%20; 
     player1temp[i].value2=rand()%20; 
     cout<<"Player1temp index: "<<i<<"  "<<player1temp[i].value1<<"  "<<player1temp[i].value2<<"\n"; 
    } 

    player1 = std::move(player1temp); 
    //don´t use player1temp anymore now 

    cout<<"\n\n"; 
    for(int i=0; i<5; i++) 
    { 
     cout<<"Player1 index: "<<i<<"  "<<player1[i].value1<<"  "<<player1[i].value2<<"\n"; 
    } 
    return 0; 
} 
+0

Является ли это хорошим решением для использования функции memcpy()? Скопировать данные с player1temp на player1? –

+0

с вектором? Нет, это совершенно неправильно. С исходными указателями, если вы исправите две упомянутые ошибки, все в порядке (memcpy не требуется для назначения * указателей *) – deviantfan

+0

Даже если вы настаиваете на решениях типа memcpy, по крайней мере, предпочитаете std :: copy. Это не C! –

Смежные вопросы