Dotaz – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Dotaz – C / C++ – Fórum – Programujte.comDotaz – C / C++ – Fórum – Programujte.com

 

User170
Duch
8. 12. 2017   #1
-
0
-

 Zdravím, potřeboval bych poradit, co je u uvedeného zdrojového kódu špatně. Snažím se zkopírovat

Pole A, které obsahuje náhodně vygenerované prvky, do polí B a C, bohužel při výstupu se mi ukazují nesmyslné záporné hodnoty, dokázal by mi někdo objasnit proč tomu tak je.

Připojen obrázek.

#include <stdio.h>
#include <stdlib.h>
#include <time.h>



int main()
{
	int N,i,j;
	
	
	printf("Zadejte pocet cisel \n");
	scanf("%d", &N);
	
	int *A = (int *)malloc(N * sizeof(int));
	int *B = (int *)malloc(N * sizeof(int));
	int *C = (int *)malloc(N * sizeof(int));

	printf("Pole A: \n");
	for (i = 0; i < N; i++)
	{
		A[N] = (rand()%100 );
		
		
		printf("%d \n", A[N]);
	}

	for (i = 0; i < N; i++)
	{
		B[i] = A[i];
	}

	for (i = 0; i < N; i++)
	{
		C[i] = A[i];
	}
    
	printf("Pole B: \n");
	for (i = 0; i < N; i++)
	{
		
		printf("%d \n", B[N]);
	}
	
	printf("Pole C: \n");
	for (i = 0; i < N; i++)
	{
		printf("%d \n", C[N]);
		
	}
	return 0;
}
Nahlásit jako SPAM
IP: 185.194.46.–
KIIV
~ Moderátor
+43
God of flame
8. 12. 2017   #2
-
0
-

#1 User17
kdyz tisknes pole B a C, tak jako indexacni promennou pouzivas N misto i. Coz je zaroven az za polem, takze tam muze byt cokoliv.

Taktez, pokud bys tiskl pole A samostatne, tak zjistis, ze i ty hodnoty zapisujes za pole A a vzdy do jedineho mista.

Nahlásit jako SPAM
IP: 81.30.230.–
Program vždy dělá to co naprogramujete, ne to co chcete...
Kit+15
Guru
8. 12. 2017   #3
-
0
-

#1 User17
Pole A máš prázdné, zapisuješ až kamsi za něj.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
8. 12. 2017   #4
-
0
-

Několik drobností:
- nadbytečná existence proměnné j, nikde se nepoužívá
- dynamicky alokovaná paměť by se měla uvolnit (po skončení práce s ní)

Zásadní věci (zmíněné v předchozích příspěvcích):
- indexy prvků v poli jsou v rozsahu 0 až (N-1) včetně
- při plnění pole A a při vypisování polí B a C je neprocházíš, pracuješ jen s "neexistujícím" prvkem s indexem N

Fakt, že nenastane žádná vyjímka, neznamená, že je v programu vše v pořádku. Při zápisu mimo alokovanou paměť je škála projevů a následků široká - od "funguje normálně" přes "nahodile zmateně" až po "kolaps" systému.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
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, 86 hostů

Podobná vlákna

"Mysql dotaz v dotaz" — založil Tomáš Sedlmajer

Dotaz — založil Katerina

Dotaz — založil RePRO

Dotaz — založil Filip

C++ dotaz — založil Darkweaver

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ý