Protože pole má pevnou velikost. Inicializoval si pole velikosti 0 - vůbec nevím k čemu by taková konstrukce měla být. Koneckonců kompilátor ti to i naznačí:
keddie@musa:~/src/cpp$ g++ forum.cpp
keddie@musa:~/src/cpp$ g++ -Wall -pedantic forum.cpp
forum.cpp: In function ‘int main(int, char**)’:
forum.cpp:7: error: zero-size array ‘pole1’
(prvně kompiluji bez parametrů - projde to, pak kompiluji s tím, že má kompilátor upozorňovat na vše).
Výsledkem je, že zapisuješ do paměti za polem, což je ošklivé a Unixy ti to nedovolí. Windows občas ano, občas ne.
Např:
using namespace std;
int main (int argc, char *argv[])
{
int *pole1 = new int[10];
int a,b,c,d;
c=0;
d=0;
cin >> a;
while(a > 0){
b=a%2; // a \in {0,1}
if(b==1){
pole1[c]=b;
d++;
}
if(b==0){
pole1[c]=b;
d++;
}
c++;
a=a/2;
}
cout << d;
return 0;
}
keddie@musa:~/src/cpp$ g++ -Wall -pedantic forum.cpp
keddie@musa:~/src/cpp$ ./a.out
15
4
Ale příliš nechápu k čemu ten kód je. Nicméně to je možná tím ořezáním.
PS: MonoDevelop to také kompiluje g++, čili to je stejné.