błąd wczytywania do tablicy dynamicznej jednowymiarowej

0

podczas wczytywania pętla pobiera za dużo wartości do tablicy, nie rozumiem skąd wynika błąd i jak mogę go poprawić.

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

int k, g, gv, o;
int i;

int main(){	
	scanf("%d\n %d\n %d\n %d", &k, &g, &gv, &o);
	int *tab= NULL;
	tab=malloc(o*sizeof(int));
	for(i=0; i<o; i++)
	{
		tab[i]=0;
	}
	for(i=0; i<o; i++)
	{
		scanf("%d", &tab[i]);
	}
	for(i=0; i<o; i++)
	{
		printf("%d ", tab[i]);
	}
	
	free ( tab ) ;
	tab = NULL ;

	return 0;
}
2
  1. Nie używaj zmiennych globalnych
  2. Nazwij zmienne tak, żeby było wiadomo co oznaczają
  3. Unikaj używania jednoliterowych zmiennych io nazwach "o", "O" (mylą się z zerem), "l", "I" (mylą się z 1), "s", "S" (5)

Pomijając to - program wydaje się działać poprawnie.

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

int main()
{ 
    int i,k,g,gv,size,*tab;
    scanf("%d%d%d%d",&k,&g,&gv,&size);
    tab=malloc(size*sizeof(int));
    //memset(tab,0,size*sizeof(int)); // zamiast zerowania
    for(i=0;i<size;++i) scanf("%d",tab+i);
    for(i=0;i<size;++i) printf("%d ",tab[i]);
    free(tab);
    return 0;
}

https://ideone.com/vCl2sA

3
  1. sprawdzaj wynik zwracany przez scanf -> to ilość danych poprawnie wczytanych
int count = scanf(....  
// ma być 4

  1. sprawdzić debugerem, jakie są wartości zmiennych. Nauka debugera to podstawa, a tym bardziej dla poczatkujacych

1 użytkowników online, w tym zalogowanych: 0, gości: 1