Goto page Previous 1, 2, 3 ... 6, 7, 8 ... 10, 11, 12 Next
Janusz
Guest
Fri May 19, 2023 2:39 pm
W dniu 19.05.2023 o 13:32, J.F pisze:
Quote:
On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
W dniu 18.05.2023 o 12:18, Marek pisze:
On Thu, 18 May 2023 08:55:51 +0200, Janusz <janusz_k@o2.pl> wrote:
Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
status.
Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
unsigned short BT[300];
int i;
for (i=0; i<sizeof(BT);i++)
BT[i] = getval(i);
Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
tablicą ze wskaźnikami do stringów.
No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
chyba kompilator czy linkier nie ma tu błędu w adresacji?
Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
wiadomo gdzie.
Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
wychodzą kwiatki.
Quote:
Na starość to trzepać worki po cemencie a nie programować....
Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
elektronikę.
Ale potem takie krzaczki jak powyzej wychodzą
Spokojnie ty też będziesz miał kiedyś tyle, zobaczy jak ci sie wtedy
optyka zmieni.
--
Janusz
J.F
Guest
Fri May 19, 2023 2:48 pm
On Fri, 19 May 2023 12:54:13 +0200, Grzegorz Niemirowski wrote:
Quote:
JDX <jdx@onet.pl> napisał(a):
No, czyli, służą do czego innego, więc jedno nie jest workaroudem na brak
drugiego.
Jest, bo na tym polega workaround, że używasz czegoś nieprzeznaczonego do
danego celu. sizeof() nie służy do zwracania liczby elementów ale czasem
może dać poprawny wynik (dla typu jednobajtowego). Przy typie wielobajtowym
trzeba podzielić przez sizeof(typ_wielobajtowy). Można też w ogóle nie
używać sizeof() ale mieć stałą definiującą rozmiar i używać jej zarówno do
deklaracji tablicy jak i do dostępu do tej tablicy. Szczególnie przydatne
jak ta tablica jest potem gdzieś przekazywana i ktoś przez roztargnienie
mógłby zrobić sizeof() na wskaźniku i dostać (zwykle) 4 lub 8 zależnie od
architektury zamiast rozmiaru tablicy.
W zwykłym C na przekazanej tablicy w ogole juz nie mozna ustalic
rozmiaru.
Jak rozmiar zmienny, to trzeba go jawnie przekazywać,
jak stały, to mozna coz z typami kombinować.
A sizeof to nawet nie funkcja, tylko operator i to "czasu kompilacji"
- kompilator ustala ile wynosi wartosc.
P.S. Nie ma jakis cudów związanych z rozmieszczeniem danych?
Chodzi mi po głowie, ze MIPS lubil na granicy słów 32-bit,
wiec np sruktura {int, char} może i ma 5 bajtów, ale
w tablicy takie struktury byłyby rozmieszczone co 8 ...
J.
heby
Guest
Fri May 19, 2023 2:56 pm
On 19/05/2023 14:48, J.F wrote:
Quote:
Chodzi mi po głowie, ze MIPS lubil na granicy słów 32-bit,
wiec np sruktura {int, char} może i ma 5 bajtów, ale
w tablicy takie struktury byłyby rozmieszczone co 8 ...
Padding.
https://c-faq.com/struct/align.html
https://iq.opengenus.org/size-of-struct-in-c/
J.F
Guest
Fri May 19, 2023 3:56 pm
On Fri, 19 May 2023 14:39:44 +0200, Janusz wrote:
Quote:
W dniu 19.05.2023 o 13:32, J.F pisze:
On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
W dniu 18.05.2023 o 12:18, Marek pisze:
On Thu, 18 May 2023 08:55:51 +0200, Janusz <janusz_k@o2.pl> wrote:
Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
status.
Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
unsigned short BT[300];
int i;
for (i=0; i<sizeof(BT);i++)
BT[i] = getval(i);
Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
tablicą ze wskaźnikami do stringów.
No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
chyba kompilator czy linkier nie ma tu błędu w adresacji?
Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
wiadomo gdzie.
Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
wychodzą kwiatki.
No ale widzisz - źle policzył, przekroczyl zakres,
a C NIE MA ZABEZPIECZEN.
I w miare dobrze, ze nie ma.
A funkcja dobra, tylko źle użyta.
Quote:
Na starość to trzepać worki po cemencie a nie programować....
Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
elektronikę.
Ale potem takie krzaczki jak powyzej wychodzą
Spokojnie ty też będziesz miał kiedyś tyle, zobaczy jak ci sie wtedy
optyka zmieni.
Trzeba umiec powiedzieć "dość" :-)
A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
trudno nadążyć :-(
J.
io
Guest
Fri May 19, 2023 4:10 pm
W dniu 18.05.2023 o 20:39, heby pisze:
Quote:
On 18/05/2023 20:30, Marek wrote:
....
Co ciekawe, nawet Arduino wymusza pisanie w C++, tylko mało kto
zauważył.
W jaki niby sposób wymusza?
heby
Guest
Fri May 19, 2023 4:49 pm
On 19/05/2023 16:10, io wrote:
Quote:
Co ciekawe, nawet Arduino wymusza pisanie w C++, tylko mało kto zauważył.
W jaki niby sposób wymusza?
Przez dostarczenie ogromnej ilości biblitek napisanych w C++.
Pierwsza od reki:
https://github.com/moononournation/Arduino_GFX
Janusz
Guest
Fri May 19, 2023 5:21 pm
W dniu 19.05.2023 o 15:56, J.F pisze:
Quote:
On Fri, 19 May 2023 14:39:44 +0200, Janusz wrote:
W dniu 19.05.2023 o 13:32, J.F pisze:
On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
W dniu 18.05.2023 o 12:18, Marek pisze:
On Thu, 18 May 2023 08:55:51 +0200, Janusz <janusz_k@o2.pl> wrote:
Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
status.
Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
unsigned short BT[300];
int i;
for (i=0; i<sizeof(BT);i++)
BT[i] = getval(i);
Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
tablicą ze wskaźnikami do stringów.
No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
chyba kompilator czy linkier nie ma tu błędu w adresacji?
Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
wiadomo gdzie.
Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
wychodzą kwiatki.
No ale widzisz - źle policzył, przekroczyl zakres,
On czy funkcja?
Quote:
a C NIE MA ZABEZPIECZEN.
To wiadomo, po to użył funkcję.
Quote:
I w miare dobrze, ze nie ma.
A funkcja dobra, tylko źle użyta.
No nie, jest skopana skoro działa wybiórczo.
A Ty wiedziałeś przed tym wątkiem że taki problem istnieje?
Quote:
Na starość to trzepać worki po cemencie a nie programować....
Eee tam, ja mam już prawie 63 i dalej piszę programy i naprawiam
elektronikę.
Ale potem takie krzaczki jak powyzej wychodzą
Spokojnie ty też będziesz miał kiedyś tyle, zobaczy jak ci sie wtedy
optyka zmieni.
Trzeba umiec powiedzieć "dość"
I wtedy już można się kłaść do trumny. Można zwolnić ale zatrzymanie
jest uziemiające już na stałe.
Ale ja wciąż czuję się młodo, mam wszystkie włosy i nawet jeszcze nie
całkiem siwe więc nadal daję rady, oczywiście w swoim tempie a nie w
takim jak otoczenie ode mnie oczekuje.
Quote:
A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
trudno nadążyć
Ja akurat jestem 'techniczny' więc w miarę nadążam.
Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
5 i coś tam jeszcze chodzące na windzie.
--
Janusz
J.F
Guest
Fri May 19, 2023 5:35 pm
On Fri, 19 May 2023 17:21:59 +0200, Janusz wrote:
Quote:
W dniu 19.05.2023 o 15:56, J.F pisze:
On Fri, 19 May 2023 14:39:44 +0200, Janusz wrote:
W dniu 19.05.2023 o 13:32, J.F pisze:
On Thu, 18 May 2023 12:44:11 +0200, Janusz wrote:
W dniu 18.05.2023 o 12:18, Marek pisze:
On Thu, 18 May 2023 08:55:51 +0200, Janusz <janusz_k@o2.pl> wrote:
Dla mnie trochę dziwny jest ten fragment, reason-nie wykorzystana
zmienna a komunikat (z tablicy) dwa razy wywołujesz ten sam, zmienna
status.
Kod na potrzeby posta trochę uprościłem. Znalazłem dziada:
unsigned short BT[300];
int i;
for (i=0; i<sizeof(BT);i++)
BT[i] = getval(i);
Analizując mapę linkera widać, że BT była umieszczona tuż przed tamtą
tablicą ze wskaźnikami do stringów.
No i co z tego, przecież to dwie osobne tablice i osobno się adresują i
chyba kompilator czy linkier nie ma tu błędu w adresacji?
Tablice moze i osobne, ale jak przekroczysz rozmiar BT, to trafi nie
wiadomo gdzie.
Ale przecież po to używa funkcję czy co to tam jest żeby mu policzyło
długość tablicy, na palcach jej nie liczył, a że funkcja skopana to
wychodzą kwiatki.
No ale widzisz - źle policzył, przekroczyl zakres,
On czy funkcja?
On.
Quote:
a C NIE MA ZABEZPIECZEN.
To wiadomo, po to użył funkcję.
I w miare dobrze, ze nie ma.
A funkcja dobra, tylko źle użyta.
No nie, jest skopana skoro działa wybiórczo.
A Ty wiedziałeś przed tym wątkiem że taki problem istnieje?
Jaki problem?
że sizeof zwraca, a własciwie to podaje, rozmiar w bajtach, to wiem.
że można zajechac obszar innej zmiennej w C, i nic przed tym nie
ostrzeże - to też wiem.
Markowi pogratulować, ze tak szybko namierzył miejsce problemu.
Quote:
A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
trudno nadążyć
Ja akurat jestem 'techniczny' więc w miarę nadążam.
Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
5 i coś tam jeszcze chodzące na windzie.
A wiesz, ze juz jest W11 ? :-)
J.
Jacek Radzikowski
Guest
Fri May 19, 2023 6:41 pm
On 5/19/23 11:21, Janusz wrote:
[...]
Quote:
Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
5 i coś tam jeszcze chodzące na windzie.
Kompletnie OT, ale zżera mnie ciekawość: Dlaczego używasz Win do
odpalania KiCada, skoro ładnie działa na linuksie?
Jacek
Janusz
Guest
Fri May 19, 2023 8:40 pm
W dniu 19.05.2023 o 17:35, J.F pisze:
Quote:
I w miare dobrze, ze nie ma.
A funkcja dobra, tylko źle użyta.
No nie, jest skopana skoro działa wybiórczo.
A Ty wiedziałeś przed tym wątkiem że taki problem istnieje?
Jaki problem?
że sizeof zwraca, a własciwie to podaje, rozmiar w bajtach, to wiem.
No to podaje prawidłowy rozmiar czy nie?
Quote:
że można zajechac obszar innej zmiennej w C, i nic przed tym nie
ostrzeże - to też wiem.
Ale jakim prawem, w tej konstrukcji nie powinno do tego dojść, przecież
po to 'pytał' o długość tablicy aby nie przekroczyć zakresu. Skoro
przekracza to oznacza że funkcja jest zła. Koniec kropka.
Quote:
Markowi pogratulować, ze tak szybko namierzył miejsce problemu.

Quote:
A tu jeszcze co chwila cos nowego wymyślaja i zaskakują człowieka na
stare lata ... i to w szczegółach, bo w ogółach to za tym postępem
trudno nadążyć
Ja akurat jestem 'techniczny' więc w miarę nadążam.
Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i Kicada
5 i coś tam jeszcze chodzące na windzie.
A wiesz, ze juz jest W11 ?
No i co z tego?Obaj moi synowie go mają a ja nie chcę.
--
Janusz
Janusz
Guest
Fri May 19, 2023 8:44 pm
W dniu 19.05.2023 o 18:41, Jacek Radzikowski pisze:
Quote:
On 5/19/23 11:21, Janusz wrote:
[...]
Ostatnio zamiast W7 bo mnie wkurzał zainstalowałem Ubuntu 22 LTS, a W7
postawiłem na wirtualce po to żeby odpalić na nim Avr Studio 7 i
Kicada 5 i coś tam jeszcze chodzące na windzie.
Kompletnie OT, ale zżera mnie ciekawość: Dlaczego używasz Win do
odpalania KiCada, skoro ładnie działa na linuksie?
Bo mam projekty jeszcze robione w 4 i 5, każdy chce mi je remapowć ale
przy tym oczywiście się wywala na moich bibliotekach. Mam już dość z tym
walki, pod windą 2 wersji nie zainstalujesz bo mają wspólne zmienne i
nawet dynamiczne przełączanie/mapowanie zmiennych nie pomaga. A tak w
Ubuntu odpalam 7, pod W7 odpalam 5 i mam jeszcze XP gdzie odpalam
najstarsze pod 4 i programy tylko dobrze pod Xp działające.
--
Janusz
Marek
Guest
Fri May 19, 2023 10:54 pm
On Fri, 19 May 2023 20:40:16 +0200, Janusz <janusz_k@o2.pl> wrote:
Quote:
Ale jakim prawem, w tej konstrukcji nie powinno do tego dojść,
przecież
po to 'pytał' o długość tablicy aby nie przekroczyć zakresu.
Ale męczysz. A długość tablicy w czym? W milach czy we wiorstach? A
może w łokciach?
- Kierowniku ile mamy kopać ten rów?
- Od tego słupa do 15:00
--
Marek
Marek
Guest
Sat May 20, 2023 6:46 am
On Fri, 19 May 2023 17:35:37 +0200, "J.F"
<jfox_xnospamx@poczta.onet.pl> wrote:
Quote:
Markowi pogratulować, ze tak szybko namierzył miejsce problemu.
Właściwe to już nie jest rocket science, po adresach symboli po
konsolidacji całości widać co sąsiaduje przed najeżdżaną tablicą.
Jeśli inna to jest pierwszym podejrzanym kandydatem do sprawdzenia.
Wyszedł banał a liczyłem, że ten wyjątek powodowało coś ciekawszego.
--
Marek
Janusz
Guest
Sat May 20, 2023 9:18 am
W dniu 19.05.2023 o 22:54, Marek pisze:
Quote:
On Fri, 19 May 2023 20:40:16 +0200, Janusz <janusz_k@o2.pl> wrote:
Ale jakim prawem, w tej konstrukcji nie powinno do tego dojść,
przecież po to 'pytał' o długość tablicy aby nie przekroczyć zakresu.
Ale męczysz.
Ja męczę? przecież to ty miałeś problem nie ja.
A długość tablicy w czym? W milach czy we wiorstach? A może
Quote:
w łokciach?
Skoro masz takie podejście to się wypisuję z tego tematu.
Co nie zmienia postaci rzeczy ze funkcja jest zła.
Quote:
- Kierowniku ile mamy kopać ten rów?
- Od tego słupa do 15:00
Byłeś w wojsku? chyba nie, a ja byłem całe 2 lata i doskonale wiem co to
znaczy.
--
Janusz
Marek
Guest
Sat May 20, 2023 10:57 am
On Sat, 20 May 2023 09:18:54 +0200, Janusz <janusz_k@o2.pl> wrote:
Quote:
Skoro masz takie podejście to się wypisuję z tego tematu.
Co nie zmienia postaci rzeczy ze funkcja jest zła.
Nie obrażaj się. Już inni próbowali Ci wytłumaczyć, że operator
działa prawidłowo i tak ma być. Tylko trzeba pamiętać w jakich
jednostkach operuje.
--
Marek
Goto page Previous 1, 2, 3 ... 6, 7, 8 ... 10, 11, 12 Next