• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Dlaczego niektóre programy z C++ ze wskaźnikami działają na Win 7, a na Win 8 nie?

Object Storage Arubacloud
0 głosów
204 wizyt
pytanie zadane 2 czerwca 2016 w C i C++ przez Owczarek Niemiecki Obywatel (1,570 p.)
Albo odwrotnie? Dlaczego tak jest? Zauważyłam to przy wskaźnikach, dlaczego do różnych wersji systemu Windows trzeba inaczej kod pisać?

2 odpowiedzi

+2 głosów
odpowiedź 2 czerwca 2016 przez draghan VIP (106,230 p.)

dlaczego do różnych wersji systemu Windows trzeba inaczej kod pisać?

Nie ma takiej potrzeby. Jeśli program jest napisany poprawnie i kompilowany poprawnym dla danej architektury kompilatorem, musi działać poprawnie. To nie są porady wróżbity Macieja, tylko jednoznaczny kod, który zawsze ma wykonać się tak samo.

Pamiętaj, że operator delete musi dostać dokładnie ten sam adres, który dostałaś przy alokacji operatorem new. Nie może być przestawiony w inne miejsce, np. za pomocą inkrementacji czy wyzerowania.

+1 głos
odpowiedź 2 czerwca 2016 przez niezalogowany
Pokaż kod. Na jakim kompilatorze są kompilowane programy?
komentarz 2 czerwca 2016 przez Owczarek Niemiecki Obywatel (1,570 p.)
Nie mam aktualnie żadnego kodu, np. nie dawno uczyłam się takiego czegoś jak "wskaźniki na struktury" i tam na jakiejś stronie był podany kod i niby miał działać, ale na win 8 nie działał, musiałam trochę inny znaleźć. A tak ogólnie to jak są gdzieś w programie używane wskaźniki z tablicami (wskaźnik wskazuje na tablicę) to na win 8 muszę potem ustawiać go na NULL żeby go potem usunąć, czego nie muszę robić na win 7.
komentarz 2 czerwca 2016 przez niezalogowany
Bez kodu nic ci nie powiem. Ewentualnie podaj link do strony. Usunąć wskaźnik? W jakim sensie?
komentarz 3 czerwca 2016 przez Owczarek Niemiecki Obywatel (1,570 p.)
#include<iostream>
#include<cstdlib>
using namespace std;
 
struct punkt{
  int *x, *y;
  char nazwa;
};
 
int main()
{
  punkt *A = new punkt;
 
  //wczytanie punktu A
  cin>>*A->x; //przypisanie wartosci do zmiennej wskaźnikowej
  cin>>*A->y;
  cin>>A->nazwa; //przypisanie wartosci do zwykłej zmiennej
 
  //wypisanie wartosci punktu A
  cout<<*A->x<<endl;
  cout<<*A->y<<endl;
  cout<<A->nazwa<<endl;
 
  system("pause");
 
  return 0;
}

To mi nie działa, ani na win 8, ani na win 7, dlaczego? Znalazłam ten kod na necie.

Działa jak bodajże (?) usunie się gwiazdki przed x i y.Czyli tak jakby zamienić je na zwykłe zmienne, a nie na wskaźniki.

1
komentarz 3 czerwca 2016 przez niezalogowany
cin>>*A->x; //przypisanie wartosci do zmiennej wskaźnikowej
cin>>*A->y;

Tak nie można. x i y mają w sobie jakieś śmieciowe wartości, czyli mogą wskazywać na adres, który nie istnieje w pamięci wirtualnej procesu, a ty pod ten adres próbujesz zapisać jakieś dane. Najpierw zainicjalizuj wskaźniki.

komentarz 3 czerwca 2016 przez Owczarek Niemiecki Obywatel (1,570 p.)
Mógłbyś napisać jakby miało to wyglądać?
komentarz 3 czerwca 2016 przez draghan VIP (106,230 p.)
badbullpl +1. :)

W ogóle jaki jest sens trzymania w strukturze opisującej punkt, wskaźniki do intów...? To jest nielogiczne.
komentarz 3 czerwca 2016 przez niezalogowany
Jak już wspomniał draghan jest to całkowicie nielogiczne i bezsensu. Jeśli jednak dalej chcesz się trzymać tego rozwiązania to tworzysz dwie zmienne i inicjalizujesz wskaźniki adresami tych zmiennych np. A->x=&a;

Podobne pytania

+1 głos
2 odpowiedzi 338 wizyt
pytanie zadane 26 stycznia 2022 w Systemy operacyjne, programy przez Tadzio001 Obywatel (1,610 p.)
0 głosów
1 odpowiedź 129 wizyt

92,615 zapytań

141,465 odpowiedzi

319,782 komentarzy

61,997 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...