(Pointer -> Array ) In Funktion befüllen aber nach Ende der Funktion leer

Shadow

Mitglied
Hallo miteinander!

Ich habe gerade ein ziemlich interessantes Problem, wo ich gerade nicht wirklich durchsehe.


Ich habe folgende Schleife:

Code:
uint32 *prgResult = (uint32*)malloc(sizeof(uint32) * viWidth);
int iRow = 10;

while(x)
{
         befuellen(prgResult, iRow);
         speichern(prgResult, &iRow);
}


In "befuellen" wird der etwas prozessiert und das ergebnis in prgResult gespeichert


Code:
uint32 **prgX = 0;
// hier nur abgekürzt hingeschrieben:
prgX = createMatrixUnit32(15,15);

uint32** createMatrixUint32(int iSizeX, int iSizeY) 
{ 
    uint32** pMatrix; 
    pMatrix = (uint32**)malloc(sizeof(uint32*) * iSizeX); 
    for(int i = 0; i < iSizeX; i++) { 
        pMatrix[i] = (uint32*)malloc(sizeof(uint32) * iSizeY); 
    } 
    for(int i = 0; i < iSizeX; i++) { 
        for(int j = 0; j < iSizeY; j++) { 
                pMatrix[i][j] = 0; 
        } 
    } 
    return pMatrix; 
} 


void befuellen(uint32 *pResult, int iRow)
{
		
	for (int j = 1; j < iCountColumns-1; j++)
	{
	// prgX ist eine Matrix die im vorherein bereits allokiert wurde - dies wird persistent gespeichert!
                     // hier steht auch mein ergebnis drinnen
                                           prgX[iRow][j] = 10 + 1 + 1; // zum beispiel
		memcpy(&pResult[j],&prgX[iRow][j], sizeof(uint32));
	}
}

danach kommt das ergebnis zurück, jedenfalls ist beim debuggen, das richtige ergebnis in pResult[j] (nach dem memcpy).

wenn ich nun zur funktion "speichern" komme, ist dieser vektor aber mit lauter nullen befüllt!

Code:
void speichern(uint32 *pResult, int *iRow)

                     for (int j = 0; j < 10; j++)
	{
		

		uint32 iY = pCNNResult[j];
		if (iY == 0)
			int y = 0; // kommt immer hier her

		prgYBuffer[*piRow][j] = iY; // immer 0
 	}
}

Hat jemand von euch ne idee, woran es liegen könnte?
Ich habe den großteil des codes weggelassen und nur das nötigste gepostet. aber im prinzip ist der ablauf genau so. zuerst in einer funktion befüllen lassen, dann zurück, dann einer anderen funktion übergeben und speichern lassen.

Vielen Dank für jede Hilfe

lg
 
Zuletzt bearbeitet:
Hallo,

hab deinen Code nur kurz überflogen, aber vielleicht hilft das ja schon weiter:

Code:
uint32 *prgResult = (uint32*)malloc(sizeof(uint32) * viWidth);
int iRow = 10;

while(x)
{
         befuellen(uint32 *prgResult, &iRow);
         speichern(uint32 *prgResult, iRow);
}
Hast du wirklich uint32 *prgResult als Parameter da stehen? Das sieht mir etwas komisch aus. Der Signatur von speichern nach zu urteilen solltest du beim Aufruf als zweiten Parameter die Adresse &iRow übergeben und nicht iRow.

Grüße,
Matthias
 
Hallo!

Danke für die Antwort! Hab noch mal nachgeguckt, ich hab mich nur hier im Forum vor lauter Eile vertippt.
Ist nun korrigiert.

lg
 
Ich werd aus deinem Code nicht schlau. Was haben befuellen und speichern miteinander zu tun? Was ist pCNNResult? Was ist prgYBuffer? Hast du da vielleicht ein paar Namen durcheinander gebracht?
 
Zurück