Nazdar,
střetl jsem se s něčím co opravdu nechápu. Problematiku polí jsem už dávno překonal a pro usnadnění jsem začal používat kontejnery. Ale co čert nechtěl, musím se hrabat v jednom ze svých starších kódů kde ještě pole používám. No, a to je ten problém. Oni ty kódy totiž nefungují (ale předtím fungovali ... aspoň myslím, já už teď fakt nevím nic jistě). Problém popíšu přímo ve zdrojáku:
int foo(int ** bar, int width, int height)
{
int result=0;
for (int i=0;i<width;++i)
{
for (int y=0;y<height;++y)
{
result += bar[i][y];
}
}
return result;
}
int main()
{
using namespace std;
int arr[3][3] =
{
{41,47,85},
{96,78,14},
{32,14,58}
};
/*Kompiler křičí že se nejedná o kompatibilní datové typy, ale co kecá OMG...arr JE 2D pole a to je skutečně pointer na pointer*/
cout << foo(arr,3,3) << endl;
/*Zde už kompiler nekřičí...ALE...program leze do paměti kam nemá a linux mi vyhodí SIGSEGV*/
cout << foo((int**)arr,3,3) << endl;
return 0;
}
Jakmile 2D pole dynamicky alokuju (přímo do ** ), žádné problémy nemám. Je to snad tím že C++ začalo brát staticky alokované pole jinak?? Dřív to nebylo ne? Jsem opravdu zmaten tímto problémem.