#include <iostream>int main(){ using std::cin, std::cout, std::endl; /* Zaszyte na stałe, nie ma wpływu na poprawność */ auto ile = 4u; auto tab = new int[ile]; for ( auto i = 0u; i < ile; i++ ) { cout << (long int)tab << endl; tab++; } delete[] tab; return 0;}
39775856397758603977586439775868free(): invalid pointerThe program has unexpectedly finished.
Invalid free() / delete / delete[] / realloc() in main in /home/pawel/Projekty/QtCreator/ptrs/main.cpp:17 1: operator delete[](void*) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 2: main in /home/pawel/Projekty/QtCreator/ptrs/main.cpp:17Address 39775872 is 0 bytes after a block of size 16 alloc'd 1: operator new[](unsigned long) in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so 2: main in /home/pawel/Projekty/QtCreator/ptrs/main.cpp:10
Właśnie próbuje założyć konto w Visual Studio.
Kompilator C4302 ostrzegawcze (poziom 2) "konwersji": obcięcie z "wpisz 1" na "typ 2" Kompilator wykryto konwersji z typu większych na mniejszy typ. Informacje mogą zostać utracone. [...]
Kompilator C4311 ostrzegawcze (poziom 1) 'zmienna' : obcinanie wskaźnika z 'typ do 'typ' To ostrzeżenie wykrywa problemy obcięcie wskaźnika 64-bitowych. Na przykład, jeśli kod jest skompilowany dla architektury 64-bitowych, wartość wskaźnika (64-bitowy) zostaną obcięte Jeśli przypisano do int (32-bitowy).[...]
Jest wyraźnie napisane: (int*) jest zbyt duże, żeby zrzutować je na (int). Pierwsze jest adresem (32 albo 64 bitowa reprezentacja całkowita bez znaku), drugi jest 32 bitową liczbą całkowitą ze znakiem. Rzutowanie w żadną stronę nie ma sensu.
I proponuję nie używać zabawkowego IDE z absolutnie przestarzałym kompilatorem
Liczby za każdym razem są inne (Dlaczego? Co to w ogóle za wartości? O ile się różnią kolejne z nich? Dlaczego akurat o tyle?)
Program kończy się panikiem w delete[] (Dlaczego? Jak to poprawić?)
Czyli "zwalniany blok jest 0 bajtów za zaalokowanym blokiem 16 bajtów".
Pan Paweł bez urazy, ale zadaje trudne pytania których nie rozumiem.
CytujProgram kończy się panikiem w delete[] (Dlaczego? Jak to poprawić?)Tak ma być
Buahahahahahaha! Zaplanowany panic...
W 8:24 jest w górnym-prawym rogu ekranu informacja dokładnie o błędzie