Ochrona pamieci.

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

int main(void){

  srand(time(NULL));
  int *tab,n,a,b;

  scanf("%i",&n);
  for(int i=0;i<n;++i)
    tab[i]=i;

  for(int i=0;i<n/2;++i){
    printf("%i",tab[a]);
    ++i;
  }
  for(int i=1;i<n/2;++i){
    printf("%i",tab[a]);
    ++i;
  }
    return 0;
}

jak naprawic ten kod zeby nie naruszal ochrony pamieci ?

0

Przypisać wartość do a, bo jak na razie to są tam śmieci.

//Ale widzę, że nawet nie zaalokowałeś pamięci na tablicę :D

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

int main(void){

  srand(time(NULL));
  int *tab,n,a,b;

  scanf("%i",&n);
  for(int i=0;i<n;++i)
    tab[i]=i;

  for(int i=0;i<n/2;++i){
    a=rand()%n;
    printf("%i",tab[a]);
    ++i;
  }
  for(int i=1;i<n/2;++i){
    a=rand()%n;
    printf("%i",tab[a]);
    ++i;
  }
    return 0;
}
 

przypisalem ale dalej to samo

1

Nie zaalokowałeś pamięci dla tablicy... I w ogóle po co ci drugie konto? Bardzo ci spieszno do bana?

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

int main(void){

  srand(time(NULL));
  int *tab,n,a,b;

  scanf("%i",&n);
  for(int i=0;i<n;++i)
    tab[i]=i;

  for(int i=0;i<=n/2;++i){
    printf("%i",tab[i]);
    ++i;
  }
  for(int i=1;i<(n/2)-1;++i){
    printf("%i",tab[i]);
    ++i;
    }
    return 0;
}

drugie trzeba zmienic ale nie wiem jak ort!, beznadzieja, pierwsze tez, chce zeby wypisywalo parzyste a konczy na ort! 2

0

Popatrz na kod który ode mnie dostałeś. Szczególnie na jego pierwsze linijki, te z malloc...

0

dobra mniejsza o alokacje pamieci, chce zeby tylko dzialal ten program, pierwszy for ktory wypisuje konczy na 2 zamiast na 4 dlaczego, a drugi for powoduje naruszenie, co z tym zrobic, mniejsza o alloc

0

o_O cytując klasyka: matka wie że ćpiesz?. Kod nie działa właśnie dlatego że nie alokujesz pamięci a mimo to próbujesz do niej pisać. W ten sposób zamazujesz sobie dane na stosie a że masz ich tam niewiele to za chwilę wywalasz stos i program umiera.

0

Nie dlatego, program umiera dlatego ze probuje wypisac miejsca ktorych nie ma w tablicy, wczytuje liczby do tablicy poprawnie poniewaz pierwsza funkcja for wypisuje wszystko poprawnie, dopiero druga wysypuje program i tam jest blad

0

Zamień 8 linijke na to

int tab[32],n;

Co <ort>w ogóle</ort> ten program ma robić?

0

Nie. Obie są błędne. Po prostu C++ pozwala ci nadpisywać "twoją" pamięć bo zakłada że wiesz co robisz. Spróbuj geniuszu wpisać np. 100 liczb w tej pierwszej pętli i zobacz po ilu się wysypie.

0
#include<stdio.h>
 
int main(void)
{
  	int tab[32],n;
 
  	scanf("%i",&n);
  
  	for(int i=0; i<n; i++)
    	tab[i]=i;
 
  	for(int i=0; i<n/2; i++)
    	printf("%i",tab[i]);
    	
  	for(int i=1;i<(n/2)-1;i++)
    	printf("%i",tab[i]);

	return 0;
} 
0
Złoty Mleczarz napisał(a):
#include<stdio.h>
 
int main(void)
{
  	int tab[32],n;
 
  	scanf("%i",&n);
  
  	for(int i=0; i<n; i++)
    	tab[i]=i;
 
  	for(int i=0; i<n/2; i++)
    	printf("%i",tab[i]);
    	
  	for(int i=1;i<(n/2)-1;i++)
    	printf("%i",tab[i]);

	return 0;
} 

Nie dziala :)

0

Nie wiem chce zeby program wypisal najpierw liczby nieparzyste potem parzyste, to takie trudne ;(

0

A co ma działać skoro teraz zadziała dla 32 liczb poprawnie. To i tak o 32 więcej niż ta poprzednia wersja. Nie rozumiem tylko czemu nie napiszesz poprawnej wersji. Zresztą ten kod nie ma sensu bo obie pętle wypisują te same indeksy ;]

0
#include<stdio.h>
 
int main(void)
{
      int tab[32],n;
 
      scanf("%i",&n);
 
      for(int i=0; i<n; i++)
        tab[i]=i;
 
      for(int i=0; i<n/2+2; i++){
        printf("%i",tab[i]);
	++i;
      }
 
      for(int i=1;i<(n/2)-1;i++){
        printf("%i",tab[i]);
	++i;
      }
 
    return 0;
}

ten tez kiepski :(

1

Bo programowanie polega na myśleniu a nie na bezmyślnym wstawianiu losowych kawałków kodu w nadziei że zadziała. Weź do ręki kartkę i ołówek i rozpisz sobie co chcesz osiągnąć. Dopiero potem spróbuj napisać kod który to zrealizuje.

0

Tam wyżej to dwa razy mi się wkleiło sorry

 #include<stdio.h>
 
int main(void)
{
      int tab[n.size()],n;
 
      scanf("%i",&n);
 
      for(int i=0; i<n; i++)
        tab[i]=i;
 
      for(int i=0; tab[i]%2; i++)
        printf("%i",tab[i]);
 
      for(int i=1;i (tab[i]%2)-1; i++)
        printf("%i",tab[i]);
 
    return 0;
} 
i++)
        printf("%i",tab[i]);
 
    return 0;
} 
0
Złoty Mleczarz napisał(a):
#include<stdio.h>
 
int main(void)
{
      int tab[32],n;
 
      scanf("%i",&n);
 
      for(int i=0; i<n; i++)
        tab[i]=i;
 
      for(int i=0; tab[i]%2; i++)
        printf("%i",tab[i]);
 
      for(int i=0; #include<stdio.h>
 
int main(void)
{
      int tab[n.size()],n;
 
      scanf("%i",&n);
 
      for(int i=0; i<n; i++)
        tab[i]=i;
 
      for(int i=0; tab[i]%2; i++)
        printf("%i",tab[i]);
 
      for(int i=1;i (tab[i]%2)-1; i++)
        printf("%i",tab[i]);
 
    return 0;
} 
i++)
        printf("%i",tab[i]);
 
    return 0;
} 
 

te tez sie nie nadaja ;/

0

Mi się zdaje, czy ty sobie sam z anonima odpowiadasz?
Bo zarówno twoje pomysły na naprawę tego jak i anonima nie mają najmniejszego sensu.

0

haha nie xd

0
#include <iostream>
using namespace std;
int main()
{
   int a,b,c;
   cout << "Ile chcesz wpisac liczb: ";
   cin >> a;
   for (int i=0; i<a; i++)
   {
       cout << "Podaj liczbe: ";
       cin >> b;
       if(b%2==0) c=2;
       if(b%3==0) c=3;
       if(b%5==0) c=5;
       if(b%7==0) c=7;
       if(b%9==0) c=9;
       cout << "Liczba " << b << " jest podzielna przez " << c << endl; 
   } 
   return 0;
}
 
0

dobra skonczylem xd

#include<stdio.h>
 
int main(void)
{
  int n;
  scanf("%i",&n);
  int tab[n];
  for(int i=0; i<n; i++)
    tab[i]=i;
  
  for(int i=0; i<n; ++i){
    printf("%i",tab[i]);
    ++i;
  }
  
  for(int i=1;i<n;i++){
    printf("%i",tab[i]);
    ++i;
  }
  return 0;
} 
0

Haha mam dwa konta
nikalx
awuyonk
i sobie z anonima piszę tylko anonima z telefonu

0

To gratuluję, ale żeby wypisać liczby nie musisz ich trzymać w tablicy :P

0

Słabo skończyłeś bo aplikacja wywali sie dla trochę większych danych, jak tylko skończy się stos. Obstawiam że już dla miliona liczb może być słabo.

0

@Shalom ty jakimś wykładowcą jesteś? Masz niebiańską cierpliwość :)

0

@Shalom szacunek, jak bym nie potrafił się tylko z nim użerać...

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