2012-07-30 1 views
0

je lis les dynamic array et de l'utiliser, mais j'ai une question peu: Quand je mets le format suivant prototype:comment passer tableau avec * et en C++

void mmyfunc(int *& myArray) 
{ 
//implementation 
} 

1. Si je passe un tableau à lui, comment l'appeler? parce que je reçois:

no matching function for call to 

2.Quand i utilise la mise en œuvre suivante:

void NetworkSocket::resizeArray (int *&orig, int index, int size) 
{ 
    int *resized = new int[size]; 
    for (int i = 0; i < size; i++) 
    { 
     if (i == index) 
      i++; 

     resized[i] = orig[i]; 
    } 
    delete [] orig; 
    orig = (int *)new int[size]; 
    orig = resized; 
} 

i me reprocher seg en ligne de suppression [].

+10

Comment passez-vous un "tableau"? En outre, ce code est fuites et segfaults partout: pourquoi sortir de votre chemin pour obtenir des ennuis supplémentaires? Utilisez 'std :: vector'. –

+1

Vous avez omis la partie la plus importante du code ... comment vous l'appelez. – Marlon

Répondre

1

Je vais simplement supposer par tableau que vous voulez dire

int x[16]; 

et vous appelez la fonction

resizeArray (x, ...) 

Alors delete[] -ment il en résulte explicitement un comportement non défini, car il n'a pas été attribué avec new[]. En outre, x réside dans la mémoire automatique, de sorte qu'il est nettoyé par lui-même. De plus, vous ne pouvez pas réattribuer des tableaux. Les tableaux ne sont pas des pointeurs. Ils se décomposent en pointeurs lorsqu'ils sont passés en arguments.

Si vous déclarez le tableau comme

int* x = new int[16]; 

alors votre approche fonctionnerait. Mais pas tout à fait C++. Vous pouvez simplement utiliser un std::vector et resize(). Ne réinventez pas la roue (à moins que ce ne soit une affectation).

EDIT: Juste repéré ceci:

orig = (int *)new int[size]; 
orig = resized; 

fuira. Supprimez le new[] supplémentaire.

EDIT 2:

Qu'est-ce que est

if (i == index) 
     i++; 

censé faire?

+0

J'aurais d'abord mis le conseil 'vector', mais c'est juste moi. –

+0

@EtiennedeMartel pourrait être à des fins éducatives. –

+0

"alors votre approche fonctionnerait" ... L'approche générale oui, mais pas la mise en œuvre actuelle. –

Questions connexes