Array an Funktion übergeben/zurückgeben c++

cwriter

Erfahrenes Mitglied
So sollte es ja aussehen: new «Datentyp»[«Menge»];
Anscheindend gebe ich hier aber noch was falsch ein?
Was sagt die Fehlermeldung?

Dein "delete[] ipk" sollte wohl "delete[] a" sein, aber dein Problem scheint beim "new" zu liegen?
Du könntest natürlich das
C:
int ipk[] = /*...*/
zu
C:
int* ipk = /*...*/
machen, aber eigentlich sollte es auch mit int[] funktionieren...

Gruss
cwriter

OT: @sheel: Ja, Moves machen vieles besser. Genau genommen ist der Smart Pointer-Ansatz auch nicht gut: Durch das Kopieren werden die Referenzzähler bearbeitet. Aber dann kann man genausogut als Referenzparameter übergeben (was man ohnehin immer sollte, wenn man Performance will).
 
Zuletzt bearbeitet:

cwriter

Erfahrenes Mitglied
Die Ausgabe gibt mir nun aber z.B. 00C0AE80 aus, was wohl die Adresse ist ?
Welche Ausgabe?
C++:
std::cout << a << std::endl; //Sollte die Adresse ausgeben
std::cout << a[i] << std::endl; //Sollte den i-ten Wert ausgeben
Sicherer weiss ich es mit printf: (#include <stdio.h>)
C:
printf("address: %p\nfirst value: %d\n", a, *a);

Aber ja, es ist wahrscheinlich, dass das die Adresse des Arrays ist.

Gruss
cwriter
 

Velum

Grünschnabel
Ouuuh ja, das war dumm. Ich habe nur a einfach noch mal ausgegeben.
so funktioniert es natürlich:
Code:
cout << a[2] << endl; // Bsp

Vielen Dank für eure Hilfe
 

Velum

Grünschnabel
Wie hättest du es gelöst ? Ich möchte den Array Arbeitsstunden ja nicht überschreiben. Vielleicht übersehe ich da natürlich was.
 

abdellaui

Erfahrenes Mitglied
Wie wäre es mit:

C++:
#include <iostream>
//Prototypen
void BerechnungPK(int As[], int anzahlBelegungen, int * a);
int main()
{
    const int Size = 4;
    int * a = new int[Size];
    int arr_Arbeitsstunden[] = { 23,4,9,13,51 };
   BerechnungPK(arr_Arbeitsstunden, Size, a);

    for (int i = 0; i < Size; i++)
    {
    std::cout<<a[i]<<std::endl;
    }

   // Ab hier ist int b = BerechnungPK(); -> da Referenz

    //system("pause");
    return 0;
}

//Personalkosten berechnen Funktion
void BerechnungPK(int As[], int anzahlBelegungen, int * a)
{
    int Pkh = 32;

    for (int i = 0; i < anzahlBelegungen; i++)
    {
        a[i] = As[i] * Pkh;
    }
}

Statt a die Rückgabe von der Funktion zu überschreiben, a als Pointer übergeben und in der Funktion bearbeiten lassen?