absturz bei delete[]??



  • Folgendes :

    int* funktion(){
    
    return new int[0];
    
    }
    
    int funktion2(){
    
    int* p= funktion();
    
    delete[] p;
    
    }
    

    Wieso stürtzt mir das programm am ende von funktion2 ab??


  • Mod

    Tut es bei mir nicht. Getestet auf C++ 7.1+8.0



  • hmm.. ok dann hier der roginal code!!! hier die funktion:

    int* CScheduler::getAlternativeModul(int iModul,SBlock *pBlock){
    
    	//SmartPtr<int> p = new int[];	// SmartPointer Array
    	int* p = new int[];	// SmartPointer Array
    	int ip=0;						// SmartPointer Index
    	// Modul im ungültigen Bereich!! 
    	if( iModul>m_Config->paModul.GetSize() || iModul <0 ){
    		p[0]=-1;
    		return p;
    	}
    
    	List *pList;  //Zeiger auf Modul
    
    	p[ip++]=iModul;
    //	SmartPtr<int> p = new int[];
    	// Modulliste durchlaufen und nach Alternativen suchen
    	for(int i=0; m_Config->paModul.GetSize()> i; i++){
    		if(m_Config->paModul.ElementAt(i).iAlt== iModul)
    			p[ip++]= m_Config->paModul.ElementAt(i).iModulNr;
    	}
    	p[ip]=-1; //Ende signalisieren
    	return p;
    }
    

    der aufruf:

    int* pAltList= getAlternativeModul(pStep->iModul,&SBlock(lStart,pStep->iProcTime));
    	for(int i=0;pAltList[i]!= -1; i++){
    		iIndex= IsMatchable(pWorkflow,pAltList[i],&SBlock(lStart,lStart+pStep->iProcTime));
    		if(iIndex!=-1){
    			iModul=pAltList[i];// return 0;
    			break;
    		}
    	}
    	delete[] pAltList;
    

    bei delete[] pAltList; -> ABsturz!



  • BorisDieKlinge schrieb:

    int* p = new int[];	// SmartPointer Array
    

    ich glaube da muss was in die [] rein...



  • ja , aber es sollte dynamisch sein.. keien feste größe !!



  • BorisDieKlinge schrieb:

    ja , aber es sollte dynamisch sein.. keien feste größe !!

    muss auch nicht. du kannst dafür eine variable benutzen. wenn sich das array in der grösse ändern soll, dann nimm besser 'vector' oder sowas...



  • d.h. wenn ch vector list lösche mit delete, wrden automatische deren elemente gelöscht?



  • Erstmal ist es nicht notwendig, den vector auf dem Heap anzulegen - den kannst du als normale Variable erzeugen und herumreichen, wo immer du ihn benötigst.

    Und zweitens: Ja, wenn der vector gelöscht wird, entsorgt er auch sauber die darin enthaltenen Elemente.



  • CStoll schrieb:

    Und zweitens: Ja, wenn der vector gelöscht wird, entsorgt er auch sauber die darin enthaltenen Elemente.

    nur wenn die objekte da direkt reinkommen. bei 'nem vector, der pointer auf objekte speichert, werden die obejkte nicht automatisch gelöscht, wenn man den vector deleted...



  • ok wie ist es bei CArray?ß werden da die elemten auch gelöscht bzw .objekte


Anmelden zum Antworten