2016-02-06 37 views
-3

這種方法是我的班級成員函數(大學),它有成員,設置(指針)和卡(int)(基數)。我應該刪除重複項並減少分配的內存。使用動態內存從數組中刪除重複項。分配

nSet指針用於臨時保存數據。

不幸的是,無論何時調用它都會崩潰。 Wat嗎?

void remdup() { 
    int *nSet; 
    for(int x=0;x<card-1;x++) { 
     for(int y=x+1;y<card;y++) { 
      if(Set[x]==Set[y]) { 
       for(int g=y;g<card-1;g++) { 
        Set[g]=Set[g+1]; 
       } card--; 
      } 
      } 
    } 
    nSet=new int[card]; 
    for(int u=0;u<card;u++) { 
     nSet[u]=Set[u]; 
    } 
    delete Set; 
    Set=new int[card]; 
    for(int u=0;card;u++) { 
     Set[u]=nSet[u]; 
    } 
+1

'爲(INT U = 0 ; card; u ++)'應該是'for(int u = 0; u WhatsUp

+0

用'Set = nSet;'替換'delete Set;'後的所有代碼。 – molbdnilo

+4

你是否在調試器中運行它以找出? – alcedine

回答

0

您的for循環中有錯誤。 for(intialization;condition;increment) {}

void remdup() { 
     int *nSet; 
     for(int x=0;x<card-1;x++) { 
      for(int y=x+1;y<card;y++) { 
       if(Set[x]==Set[y]) { 
        for(int g=y;g<card-1;g++) { 
         Set[g]=Set[g+1]; 
        } card--; 
       } 
       } 
     } 
     nSet=new int[card]; 
     for(int u=0;u<card;u++) { 
      nSet[u]=Set[u]; 
     } 
     delete Set; 
     Set=new int[card]; 
     for(int u=0;u<card;u++) {<--- 
      Set[u]=nSet[u]; 
     } 
1

使用std::set而不是發明了另一種,集顯着惡化。

+0

我不得不用數組,教授的規則去做!它解決了。 – Metafity

1

首先我推薦使用std::set而不是自己做。 除此之外,如果您將for(int u=0;card;u++)更改爲for(int u=0;u<card;u++),則在代碼結束時它將起作用。 但如果你喜歡自己做所有的工作和萎縮的int一個數組,你應該使用std::memcpy將數據從舊的動態內存複製到新的一個:

#include <cstring> // memcpy 

int *nSet = new int[card]; 
std::memcpy(nSet, Set, card); 
delete [] Set; 
Set = nSet;