Ich arbeite an einem Problem und ich wurde gebeten, eine Funktion zu erstellen, die einen Zeiger zurückgibt. Das Programm, das ich geschrieben habe, funktioniert gut und alles; Ich erstelle jedoch dynamische Speicherzuweisung in meiner Funktion *newArray
und ich glaube nicht, dass ich diesen zugewiesenen Speicher freigeben, der Zeiger ptr2
zeigt auf innerhalb dieser Funktion. Gibt es eine Möglichkeit, diese Erinnerung freizugeben?Wie kann ich dynamischen Speicher freigeben, der in einer Funktion zugewiesen ist?
Ich dachte darüber nach, der Funktion einen weiteren Parameter hinzuzufügen - den Zeiger ptr2
aus der Hauptfunktion - und ändere nur den Zeiger innerhalb der Funktion, aber das widerspricht dem Zweck der Funktion, die einen Zeiger zurückgibt. Irgendwelche Gedanken hier?
Hier ist mein Code:
//Problem #12
#include <iostream>
using namespace std;
void SizeEntry(int*);
void DataEntry(int*, int);
void ShowArray(int *, int);
int *newArray(int *, int);
int main()
{
int size, new_size;
int *ptr=nullptr, *ptr2 = nullptr;
//grab size and dynamically allocate an array to the entered size
SizeEntry(&size);
ptr = new int[size];
//make size of second array
new_size=size+1;
//Fill array with data and make a new copy w/ requirements
DataEntry(ptr, size);
ptr2 = newArray(ptr, size);
cout<<"\nHere is the first array: \n";
ShowArray(ptr, size);
cout<<"Here is the new array: \n";
ShowArray(ptr2, new_size);
//free allocated array
delete [] ptr;
delete [] ptr2;
ptr = nullptr;
ptr2 = nullptr;
return 0;
}
void SizeEntry(int *size)
{
cout<<"Enter the size of your list: ";
cin>>*size;
while(*size<0)
{
cout<<"Size must be non-negative, enter another number: ";
cin>>*size;
}
}
void DataEntry(int *ptr, int size)
{
for(int count = 0; count<size; count++)
{
cout<<"Enter data for entry #"<<(count+1)<<": ";
cin>>*(ptr+count);
while(*(ptr+count)<0)
{
cout<<"Data point cannot be negative, try again: ";
cin>>*(ptr + count);
}
}
}
void ShowArray(int *ptr, int size)
{
for(int count=0; count<size; count++)
cout<<*(ptr+count)<<" ";
cout<<endl;
}
int *newArray(int *ptr, int size)
{
int *ptr2=nullptr;
int new_size = size+1;
int counter=0;
ptr2 = new int[new_size];
for(int count=0; count<new_size; count++)
{
if(count==0)
ptr2[count]=0;
else
{
ptr2[count]=ptr[counter];
counter++;
}
}
return ptr2;
}
Betrachten Sie Smartpointer –
Sie geben diesen Speicher mit 'delete [] ptr2' frei, wenn Sie damit fertig sind. Sie können es vorher nicht freigeben. –
Hallo Sami, das lösche [] ptr2 ist in main und gibt den Speicher frei, der in main erstellt wurde, auf den der ptr2 Zeiger zeigt, aber ich erschaffe auch einen anderen in * newArray Funktion. – Francisco