2016-10-08 1 views
-1

Ich habe Probleme zu verstehen, wie ein dynamisches Array durch Verweis in C++ übergeben.Wie Übergeben dynamisches Array durch Verweis C++

ich das Problem in diesem kleinen, isolierten Codebeispiel neu erstellt haben:

#include <iostream> 

using namespace std; 

void defineArray(int*); 

int main() 
{ 
    int * myArray; 
    defineArray(myArray); 

    /** CAUSES SEG FAULT*/ 
    //cout<<(*(myArray)); //desired output is 0 
    return 0; 
} 

void defineArray(int*myArray) 
{ 
    int sizeOfArray; 
    cout<<"How big do you want your array:"; 
    cin>>sizeOfArray; 

    /** Dynamically allocate array with user-specified size*/ 
    myArray=new int [sizeOfArray]; 

    /** Define Values for our array*/ 
    for(int i = 0; i < sizeOfArray; i++) 
    { 
     (*(myArray+i))=i; 
     cout<<(*(myArray+i)); 
    } 
} 
+0

Gibt es einen bestimmten Grund, warum Sie 'myArray [i] = i' nicht verwenden? Code sieht auf diese Weise viel sauberer aus – PRP

+0

Dynamische Arrays sind in C++ nicht erlaubt. –

+0

Verwenden Sie stattdessen einen 'std :: vector '. –

Antwort

3

myArray Wert übergeben wird sich jede Änderung auf myArray (wie myArray=new int [sizeOfArray];) hat nichts mit der ursprünglichen Variablen zu tun, myArray in main() ist immer noch baumelt.

Um es als Referenz übergeben zu machen,

void defineArray(int*myArray) 

zu

void defineArray(int*& myArray) 
0

Diese Lösung hoffnungslos kompliziert ändern ist. Sie brauchen nicht new[], Zeiger oder sogar einen Referenzparameter. In C++ ist das Konzept des „dynamischen Arrays“ am besten durch std::vector vertreten, die kann man einfach als Rückgabewert verwendet nur:

#include <iostream> 
#include <vector> 

std::vector<int> defineArray(); 

int main() 
{ 
    auto myArray = defineArray(); 
    if (!myArray.empty()) 
    { 
     std::cout << myArray[0] << "\n";; 
    } 
} 

std::vector<int> defineArray() 
{ 
    int sizeOfArray; 
    std::cout << "How big do you want your array:"; 
    std::cin >> sizeOfArray; 

    std::vector<int> myArray; 
    for (int i = 0; i < sizeOfArray; i++) 
    { 
     myArray.push_back(i); 
     std::cout<< myArray[i] << "\n"; 
    } 
    return myArray; 
} 

push_back wird intelligent genug arbeiten und nicht neue Speicher der ganze Zeit zuordnen. Wenn Sie das immer noch betrifft, können Sie vor dem Hinzufügen der Elemente reserve anrufen.

Verwandte Themen