• STATISTIQUES
  • Il y a eu un total de 0 membres et 26039 visiteurs sur le site dans les dernières 24h pour un total de 26 039 personnes!
    Membres: 2 605
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Forum-Webmaster
    Une communauté webmaster pour apporter / recevoir de l'aide en création de site internet. Webmaster...
    Webmaster
    [FR] WeChall
    Audio: 3, Coding: 11, Cracking: 9, Crypto: 18, Encoding: 11, Exploit: 44, Forensics: 1, Fun: 6, HTTP: 6, Image: 8, Java:...
    Challenges
    [FR] NewbieContest
    Nous vous proposons une série de challenges regroupant plusieurs domaines allant de l'exploitation de fail...
    Hacking
    [EN] Exploit-db
    Une base de données d'exploits triés par genre (GHDB, Remote, Local, Web, DOS, ShellCode) à ...
    Vulnérabilités
    [EN] Big-Daddy
    Big-Daddy est site internet communautaire avec un effectif diversifié, y compris des artistes, des programmeur...
    Hacking
    [EN] Hack this site
    Basic: 11, Realistic: 17, Application: 18, Programming: 12, Extbasic: 14, Javascript: 7, Stego: 17
    Challenges
    [FR] Le top web
    Nous offrons une sélection la plus large possible de resources webmaster gratuites, hébergement gratuit...
    Webmaster

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[C] SegFault > 6
06-01-2013, 15h32
Message : #1
Sh4dows Hors ligne
Tweetos
*



Messages : 293
Sujets : 5
Points: 49
Inscription : Dec 2012
[C] SegFault > 6
Bonjour,
J'ai une fonction qui doit prendre le premier élément d'un tableau A et le mettre dans le second B, (A[0] dans B[0]). Or j'ai un "segfault" ou un "glibc free.." dès lors que mon tableau A dépasse 6 en taille. Mes deux tableaux sont des tableaux de int.

Pour information c'est un de mes projets d'école, je ne comprend juste pas d'ou provient mon erreur dans cette fonction..

Exemple :
Code :
A = 1 2 3 4 5
B =

Sortie de ma fonction..

A = 2 3 4 5
B = 1

Ensuite voici la fonction qui pose problème :
Code C :

void    take_b(struct s_data *vars)
{
  int   i;
  int   *temp_a;
  int   *temp_b;

  if (vars->size_a >= 1)
    {
      temp_b = backup(vars->tab_b, vars->size_b);
      vars->size_b += 1;
      free(vars->tab_b);
      if ((vars->tab_b = malloc(sizeof(int) * vars->size_b)) != NULL)
    {
      i = 1;
      vars->tab_b[i - 1] = vars->tab_a[i - 1];
      temp_a = backup(vars->tab_a, vars->size_a);
      while (i < vars->size_b)
        {
          vars->tab_b[i] = temp_b[i - 1];
          i += 1;
        }
      i = 0;
      vars->size_a -= 1;
      free(vars->tab_a);
      vars->tab_a = malloc(sizeof(int) * vars->size_a);
      while (i < vars->size_a + 1)
        {
          vars->tab_a[i] = temp_a[i + 1];
          i += 1;
        }
      free(temp_b);
      free(temp_a);
    }
    }
}
 


Mon push_swap.h :
Code C :

#ifndef _PUSH_SWAP_
#define _PUSH_SWAP_

struct  s_data
{
  int   size_a;
  int   size_b;
  int   *tab_a;
  int   *tab_b;
};

#endif
 


Et mon main.c avec main() et backup() !
Code C :

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

int         main(int argc, char *argv[])
{
  int           i;
  struct s_data     *vars;

  if (argc < 2)
    return (0);
  if ((vars = malloc(sizeof(struct s_data))) == NULL)
    return (0);
  vars->size_a = argc - 1;
  vars->size_b = 0;
  if ((vars->tab_a = malloc(sizeof(int) * vars->size_a)) == NULL)
    return (0);
  if ((vars->tab_b = malloc(sizeof(int) * vars->size_b)) == NULL)
    return (0);
  i = 0;
  while (i < argc - 1)
    {
      vars->tab_a[i] = atoi(argv[i + 1]);
      i += 1;
    }
 
  /* JUST FOR TEST MY FUNC */
  i = 0;
  while (i < 1)
  {
      take_b(vars);
      i += 1;
  }

  printf("\n");
  free(vars->tab_a);
  free(vars->tab_b);
  free(vars);
  return (0);
}

int         *backup(int *tab, int sz)
{
  int           i;
  int           *new;

  if ((new = malloc(sizeof(int) * sz)) != NULL)
    {
      i = 0;
      while (i < sz)
    {
      new[i] = tab[i];
      i += 1;
    }
      return (new);
    }
  return (tab);
}
 


Je récupère tous les arguments passé au programme, puis je les transforme en int via atoi() (man pour plus d'infos) et les stocke dans mon tableau présent dans ma structure. Dans cette fameuse structure, il y a tableau A et B, ainsi que deux variables représentant leur taille.

La fonction backup fais une sauvegarde d'un tableau !!

Donc en en appellant mon programme comme ceci :
./a.out 1 2 3 4 Tous fonctionne.
Mais en faisant ceci ./a.out 1 2 3 4 5 6 7 J'ai une des erreurs cité au début Huh

Si vous voyez pourquoi je segfault ??
Merci d'avance Tongue
Faites ce que je dis et non ce que je fais !
+1 (0) -1 (0) Répondre


Messages dans ce sujet
[C] SegFault > 6 - par Sh4dows - 06-01-2013, 15h32
RE: [C] SegFault > 6 - par Ark - 06-01-2013, 15h38
RE: [C] SegFault > 6 - par Sh4dows - 06-01-2013, 15h43
RE: [C] SegFault > 6 - par Ark - 06-01-2013, 15h47
RE: [C] SegFault > 6 - par Sh4dows - 06-01-2013, 15h50
RE: [C] SegFault > 6 - par Sh4dows - 06-01-2013, 22h15

Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut