Dynamsiches Array
-
sizeof(dnmc_array) ist konstant so etwas wie 4 oder 8, je nach System. Nimm vector. Der hat eine viel bessere Wachstumsstrategie als jedesmal um 1 zu erhöhen und alles umzukopieren. Außerdem ist dein temp_array Unsinn. wozu soll das da sein? Merk dir doch einfach den Zeiger zweimal! Und du rufst delete auf einem ganz anderen Zeigerwert auf, als du vorher von new bekommen hast (da du den Zeiger veränderst)! Fast jede Zeile ist ein dicker Fehler!
-
Zu new[] gehört delete[] und nicht nur delete. Und wann soll diese Bedingung wahr sein

if(size == size+1)
-
GhostfaceChilla schrieb:
Hallo Leutem ich wollte ein Array erstellen, welches sich immer wieder um 1 erweiter, wenn ich etwas eingebe.
Warum solltest du sowas tun wollen?
sizeof(dnmc_array)tut nicht was du denkst. Was ist sizeof(void*)? sizeof(int*) - welchen Typ hat dnmc_array?Warum hast du es eigentlich nicht dnmcrry, tmprry, nmbr und sz genannt, wo du schon zur besseren Lesbarkeit Vokale rauswirfst?

Dein Programm bricht übrigens nicht ab, es stürzt ab, weil du über das allokierte Ende von tmp_array hinaus zugreifst.
Dein Programm in C++:
#include <iostream> #include <vector> using namespace std; int main() { int number; vector<int> allNumbers; while(cin >> number) { allNumbers.push_back(number); } }Oder auch:
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { std::vector<int> numbers; typedef istream_iterator<int> intIt; std::copy(intIt(cin), intIt(), back_inserter(numbers)); }
-
pumuckl schrieb:
Oder auch:
#include <iostream> #include <vector> #include <algorithm> #include <iterator> using namespace std; int main() { std::vector<int> numbers; typedef istream_iterator<int> intIt; std::copy(intIt(cin), intIt(), back_inserter(numbers)); }#include <iostream> #include <vector> #include <iterator> using namespace std; int main() { typedef istream_iterator<int> intIt; vector<int> numbers(intIt(cin), intIt()); }
-
Kellerautomat schrieb:

Autsch, mein Brett vorm Kopp...
-
typedef istream_iterator<int> intIt; vector<int> numbers(intIt(cin), (intIt())); // most vexing parseAuch nur drüber gestolpert...

-
Muss nicht. Nur MSVC ist zu doof dafuer, afaik.
Edit: http://ideone.com/B9nVT
-
Kellerautomat schrieb:
Muss nicht. Nur MSVC ist zu doof dafuer, afaik.
GCC auch

-
Siehe Edit. Das ist ganz eindeutig ein Konstruktoraufruf.
-
Kellerautomat schrieb:
Siehe Edit. Das ist ganz eindeutig ein Konstruktoraufruf.
Nö, das ist ein typedef und eine Funktionsdeklaration, was natürlich kompiliert. Erst wenn du mit dem vector arbeiten willst gehts schief:
#include <iostream> #include <vector> #include <iterator> #include <algorithm> using namespace std; int main() { typedef istream_iterator<int> intIt; vector<int> numbers(intIt(cin), intIt()); copy(numbers.begin(), numbers.end(), ostream_iterator<int>(cout, "; ")); }prog.cpp: In function ‘int main()’: prog.cpp:12: error: request for member ‘begin’ in ‘numbers’, which is of non-class type ‘std::vector<int, std::allocator<int> > ()(main()::intIt, main()::intIt (*)())’ prog.cpp:12: error: request for member ‘end’ in ‘numbers’, which is of non-class type ‘std::vector<int, std::allocator<int> > ()(main()::intIt, main()::intIt (*)())’
-
Ah lol, das war natuerlich doof von mir. Aber was zur Hoelle ist denn das fuer eine Funktionsdeklaration, naemlich intIt(cin). Was soll denn das sein?

-
das cin in Klammern ist zwar ungewöhnlich, aber gültig - einfach der Name des Parameters

void foo( int (bar) ) //void foo(int bar) { std::cout << bar; }
-
Strange. Wer denkt sich denn sowas aus.
-
Kellerautomat schrieb:
Strange. Wer denkt sich denn sowas aus.
="Jack Sparrow"]Das waren die Franzosen.