Woher weiß der Compiler wie "Breit" das Array ist?



  • #include <iostream>
    using namespace std;
    
    void foo(char** bar)
    {
    	for (int y = 0; y < 10; y++)
    	{
    		for (int x = 0; x < 10; x++)
    		{
    			// woher weiß der Compiler wie "Breit" das Array ist?
    			bar[x][y] = x+y*10;	
    
    		}
    	}
    }
    
    int main()
    {
    	char **array = new char*[10];
    
    	for(int i = 0; i < 10; i++)
    	{
    		array[i] = new char[10];
    	}
    
    	foo(array);
    }
    


  • Das weiß der Compiler gar nicht! Wenn du eine Speicherstelle außerhalb des Arrays mit den Indizes ansprichst, dann gibts einen sogennanten Segmention fault 🙂
    Um so etwas vorzubeugen ist der Programmierer da. Hifreich könnte in diesem Fall std::vector sein, da die at() Methode eine Bereichsprüfung vornimmt.



  • Wie schon gesagt kann er es garnicht. Du musst entweder die Dimensionen mit übergeben, oder char (*bar)[10], char bar[10][10], char bar[][10] bzw. gleich vector< vector<char> > benutzen.



  • Falls die Frage damit noch nicht beantwortet ist: Er muss es nicht wissen, weil du kein zweidimensionales Array vorliegen hast.


Log in to reply