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

[C] Segmentation fault

0 głosów
544 wizyt
pytanie zadane 8 kwietnia 2020 w C i C++ przez gallaxxyy Początkujący (270 p.)
edycja 9 kwietnia 2020 przez gallaxxyy
Hej, właśnie skończyłem program który generuje system

i dostaje oczekiwany efekt  ale pojawia się Segmentation Fault i nie mogę się go pozbyć. Może ktoś z was znajdzie przyczynę :D

1 odpowiedź

+1 głos
odpowiedź 8 kwietnia 2020 przez tangarr Mędrzec (155,140 p.)
wybrane 8 kwietnia 2020 przez gallaxxyy
 
Najlepsza

W funkcji swap przepisujesz aktualny napis do tablicy dwuelementowej algae. (Buffer overflow)

Dodatkowo nie zwalniasz pamięci którą alokujesz w pętli

komentarz 8 kwietnia 2020 przez gallaxxyy Początkujący (270 p.)
Dziękuję za uwagi, zadeklarowalem rozmiar tablicy na większy i dodałem free(p) i nadal jest ten  błąd
1
komentarz 8 kwietnia 2020 przez tangarr Mędrzec (155,140 p.)
Widzę, że calloc jest wywoływany ze zbyt małym buforem (daj strlen zamiast sizeof)
1
komentarz 8 kwietnia 2020 przez tangarr Mędrzec (155,140 p.)

Wywaliłbym też tego swapa.

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
void dynamics(char *input){
  char *s;
  int k;
  int j;
  int i = 0;
  int a = 0;
  
  s = strdup(input);
  printf("0.");
  puts(s);
 
    for(k=0;k<10;k++){
      char *p;
      a=0;
      j=0;
      for(i=0;*(s+i);i++)
        if(*(s+i)=='A')
          a++;
 
      p=calloc(strlen(s)+a,1);
 
      for(i=0;*(s+i);i++) {
     
      if(*(s+i)=='A'){
          *(p+j++)='A';
          *(p+j++)='B';
        }
 
      if(*(s+i)=='B'){
          *(p+j++)='A';
          }  
        }
      printf("%d.", k+1);
      puts(p);
      free(s);
      s = p;
    }
  free(s);
}
 
 
int main(){  
  char algae[] = "A"; 
  dynamics(algae); 
  return 0;
}

 

komentarz 8 kwietnia 2020 przez gallaxxyy Początkujący (270 p.)
Wielkie dzięki teraz działa okej :D

Podobne pytania

0 głosów
0 odpowiedzi 1,405 wizyt
0 głosów
1 odpowiedź 811 wizyt
pytanie zadane 12 marca 2020 w C i C++ przez kvlike Nowicjusz (170 p.)
+1 głos
1 odpowiedź 410 wizyt
pytanie zadane 17 lutego 2022 w C i C++ przez Yaqbek Nowicjusz (160 p.)

93,742 zapytań

142,680 odpowiedzi

323,299 komentarzy

63,328 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

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...