Problém s neoprávněným přístupem do paměti – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Problém s neoprávněným přístupem do paměti – C / C++ – Fórum – Programujte.comProblém s neoprávněným přístupem do paměti – C / C++ – Fórum – Programujte.com

 

Sefiros
~ Anonymní uživatel
92 příspěvků
22. 1. 2013   #1
-
0
-

Hoj, mám takový problém, vytvořil jsem program (pouze na vyzkoušení principu) posunování položek pole. Program funguje normálně když pole ve kterém se položky posunují má velikost 19,21,100,200 prvků...ale jakmile udělám pole o velikosti 20 tak mi to háže error neoprávněný přístup do paměti, za jakoukoli pomoc budu vděčný, opravdu netuším kde sem udělal chybu...

#include <iostream>
#include <string>
using namespace std;
int main()
{
const int SIZE=20; // Konstanta velikosti pole
int array[SIZE];
string ask;
for (int i=0;i<=SIZE;i++)
{
  array[i]=0;
  }
for (;;)
{
cout << "Zadejte hodnotu prvního prvku pole: ";
cin >> array[0];
for (int i=SIZE-1;i>=0;i--)
{
   array[i+1]=array[i];
   array[i]=0;
   }
cout << "--------------------Vypis Pole------------------------------" << endl;
for (int i=0;i<=SIZE;i++)
{
  cout << i << " : " << array[i] << endl;
  }
cout << "Opakovat? [ano,ne]: ";
cin >> ask;
if (ask == "ne")
{
  break;
  }
}
return 0;
}

Nahlásit jako SPAM
IP: 80.188.252.–
Krocan
~ Anonymní uživatel
9 příspěvků
22. 1. 2013   #2
-
0
-

   

for (int i=0; i < SIZE; ++i)
Nahlásit jako SPAM
IP: 2001:67c:1220:c1a3:21a:6b...–
Sefiros
~ Anonymní uživatel
92 příspěvků
22. 1. 2013   #3
-
0
-

Díky ale nepomohlo to, neustále to hlásí neoprávněný přístup do paměti

Nahlásit jako SPAM
IP: 80.188.252.–
vitamin+8
Grafoman
22. 1. 2013   #4
-
0
-

   

   array[i+1]=array[i];	//pre i=SIZE-1
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Sefiros
~ Anonymní uživatel
92 příspěvků
22. 1. 2013   #5
-
0
-

Furt nechápu kde je chyba...při procházení pole začínám od předposledního prvku proto z velikosti pole odčítám jedničku, a v cyklu přičítám jedničku proto že posouvám data do prvku směrem napravo od prvku na kterém je právě čtecí hlava

Nahlásit jako SPAM
IP: 80.188.252.–
vitamin+8
Grafoman
22. 1. 2013   #6
-
0
-

#5 Sefiros
(SIZE + 1 -  1) == SIZE

Pole sa indexuje od 0, takze index je z intervalu <0, SIZE)  co je <0, SIZE-1>

riesenie by mohlo vyzerat takto:

for (int i=SIZE-1; i>0; --i)
	array[i]=array[i-1];
Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Sefiros
~ Anonymní uživatel
92 příspěvků
22. 1. 2013   #7
-
-1
-
Mimo téma

Vyzkoušeno a nefunguje...jsou dva problémy které se vyskytli místo problému s pamětí:

1)Neposunuje to prvky pole a neustále to přepisuje první položku pole což je přesně to co nechci, ta má být vždy prázdná aby neexistovala možnost že novými daty bude přepsána stávající

2)Program nejde vypnout, když zvolím že nechci pokračovat, program začne lítat dokolečka, takže asi někde bude ještě jinej problém

Nahlásit jako SPAM
IP: 80.188.252.–
vitamin+8
Grafoman
22. 1. 2013   #8
-
0
-

#7 Sefiros
Ved to postupne posuva posledny prvok(to je 0) na prvy prvok pola a vsetky ostatne prvky vynuluje. Takze na konci budu vsade nuly.

Tak nie, presunie to predposledny prvok na miesto posledneho a zvysok vynuluje :) (zalezi ako si upravyl to nulovanie.)

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Sefiros0
Návštěvník
22. 1. 2013   #9
-
0
-

Nejdivnější je, že chyba se projevuje pouze u délky pole 20, jakmile dám jinou hodnotu algoritmus šlape jak hodinky

Nahlásit jako SPAM
IP: 80.188.252.–
vitamin+8
Grafoman
22. 1. 2013   #10
-
0
-

#9 Sefiros
a pre 24 prvkov ti to funguje?

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
Sefiros0
Návštěvník
22. 1. 2013   #11
-
0
-

Teď sem vyzkoušel a nejede...

Nahlásit jako SPAM
IP: 80.188.252.–
vitamin+8
Grafoman
22. 1. 2013   #12
-
0
-

Tak stale pristupujes do pamete ktora ti nepatri, len obcas ta zachrani zarovnavanie premennych.

Nahlásit jako SPAM
IP: 95.105.157.–
obfuscate: "The cruel god Malloc will strike you down. "
ZMeson: "That's the C god. C++ has a new god. "
KIIV
~ Moderátor
+43
God of flame
22. 1. 2013   #13
-
0
-

mas nejakej aktualni kod? v tom ze zacatku v kazdym cyklu smatas za pole... vezme-li se v potaz zarovnani po 4 bajtech tak mas nejspis zasah mimo prave pri nasobcich 4 od velikosti

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sefiros0
Návštěvník
22. 1. 2013   #14
-
0
-

Todle je aktuální kód, nikam sem s nim nehnul

Nahlásit jako SPAM
IP: 80.188.252.–
KIIV
~ Moderátor
+43
God of flame
22. 1. 2013   #15
-
0
-

tak mas chybu v kazdym cyklu kterej tam je ... coz uz ti tu stejne vsici nekolikrat rekli

Nahlásit jako SPAM
IP: 94.112.35.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Sefiros0
Návštěvník
22. 1. 2013   #16
-
0
-

Problém vyřešen, už mi to docvaklo

Nahlásit jako SPAM
IP: 80.188.252.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 36 hostů

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý