memcpy für Schleife



  • Hallo zusammen,

    ich habe folgende Code:

    for (i=500; i<=1500; i+=50)
    	{
    		SENSOR_importPolynomCSV2(stCurrentSensor,importpolynom,i); // speichert 21 Werte in importpolynom
    		for (j=0; j<=slFrameSize-1;j++)
    		{
    			createpolynom[k][j] = importpolynom[j]; // Inhalt von den 21 Referenzmessungen
    		}
            k++;
    	}
    	free(importpolynom);
    

    Für createpolynom und importpolynom habe ich jeweils allociert. Problem ist, wie man vielleicht schon erkennt das free nach der for-schleife, weil ja auch so das createpolynom lösche, was ich nun nicht will!

    Meine Frage ist nun, da ich jetzt weiß, dass ich es mit memcpy machen muss, wie vereinbare ich eine solche Schleife wie die oben?

    Vielen Dank für die Hilfe.



  • Warum übergibst du überhaupt importpolynom an die Funktion und nicht gleich createpolynom[k]? Wo kommt das k her? Warum inkrementierst du das nicht auch gleich im Schleifenkopf? Warum j<=slFrameSize-1 wo doch j<slFrameSize kürzer, äquivalent und allgemein üblich ist?

    Das fällt mir spontan dazu ein.



  • moin,

    dann etwas mehr code, zumVerständnis 😉

    data_pairs = 20+1; // Anzahl der einzulesenden Datein
    
    	slFrameSize = (stCurrentSensor->usResX-2)*stCurrentSensor->usResY; // = 3072
    
    	// -----------------------------------------------------------------------------
    	// Polynom 21 x 3072 --> für die Rohdaten
    	createpolynom = (float **)malloc((data_pairs) * sizeof(float));
    	if(createpolynom == NULL)
    	{
    		sprintf(scLogTxt, "--> No virtual memory\n");
    		printf(scLogTxt);
    		return FALSE;
    	}
    	for(; slCamCount < slFrameSize; slCamCount++)
    	{
    		createpolynom[slCamCount] = (float *)malloc(slFrameSize * sizeof(float));
    		if(createpolynom[slCamCount] == NULL)
    		{
    			sprintf(scLogTxt, "--> 1 No memory for row  %d\n", slCamCount);
    			printf(scLogTxt);
    			return FALSE;
    		}
    	}
    
    	// -----------------------------------------------------------------------------
    	// Polynom 1 x 3072 --> für EINE Dateien
    	importpolynom = (float *)malloc(slFrameSize * sizeof(float));
    	// -----------------------------------------------------------------------------
    	// einlesen der Referenz Dateien
    	k = 0;
    	for (i=500; i<=1500; i+=50)
    	{
    		SENSOR_importPolynomCSV2(stCurrentSensor,importpolynom,i);
    		for (j=0; j<=slFrameSize-1;j++)
    		{
    			createpolynom[k][j] = importpolynom[j]; // Inhalt von den 21 Referenzmessungen
    		}
            k++;
    	}
    	free(importpolynom);
    	printf("Bilder Import Erfolgreich !\n");
    

    also die Funktion "SENSOR_importPolynomCSV2" importiert mir im jeden durchlauf von i EINE datei (deshalb wird i auch mit übergeben, weil die Datei so aussehen: Datei_50, Datei_100, ... , Datei_1500) eingelesen wird. Diese wird in importpolynom gespeichert.
    Deshalb sieht importpolynom auch so aus:

    0 1 2  .... 3069 3070 3071 
    [x|y|z| ... | a  | b  | c  ]
    

    Problem ist dann aber, dass ich das Array bzw. den Inhalt von Datei_50 im importpolynom mit dem Inhalt von Datei_100 überschreibe.

    Deshalb habe ich das createpolynom, was dann nach der for-schleife so aussehen soll (sry, wenn ich einen spalten/zeilen-dreher drinnen haben sollte):

    0 1 2  .... 3069 3070 3071 
      Datei_50: [x|y|z| ... | a  | b  | c  ] 
     Datei_100: [x|y|z| ... | a  | b  | c  ] 
       ...
    Datei_1450: [x|y|z| ... | a  | b  | c  ] 
    Datei_1500: [x|y|z| ... | a  | b  | c  ]
    

    Also habe ich ein Array von 21 x 3072. Das j zählt die Spalten von 0 --> 3071, das i erhöht den Wert für die Funktion und das k erhöht so gesehen die Zeilen.

    Da ich aber durch createpolynom immer auf eine neue Zeile von importpolynom zeige, und dann freigebe habe ich ja ein Problem, weil ich dann so gesehen, dass createpolynom auch lösche!

    Meine Frage ist jetzt, wie ich das Problem lösen kann.
    Oder kann das einfach so lösen:

    memcpy(createpolynom[k][j],importpolynom[j],sizeof(importpolynom));
    

    welche dann:

    createpolynom[k][j] = importpolynom[j];
    

    ersetzt?

    Vielen Dank für die Hilfe



  • Tim schrieb:

    Warum übergibst du überhaupt importpolynom an die Funktion und nicht gleich createpolynom[k]?

    Das hab ich nicht umsonst geschrieben.



  • war SO nicht gemeint 😉

    Ja stimmt, dann nehme ich die For-Schleife einfach mit in die Funktion rein... danke 😃



  • 😕 Du musst nichts in die Funktion reinziehen, sondern sie nur mit einem anderen Argument aufrufen!


Anmelden zum Antworten