2012-01-05 3 views
0

d'abord merci d'avoir lu la question.fopen seg. faute. Nom de fichier: 10000000 Taille: 47M

J'ai un étrange seg. faute en essayant d'ouvrir un fichier, le code est simple:

f = fopen(itoa(SZ,10),"r"); 

SZ est une variable que je mets à la compilation du temps pour sélectionner le fichier que je suis l'ouverture (est programm pour optimiser un algorisme et je suis en train avec des problèmes de taille différente). Le débogage avec gdb montre que ça fonctionne bien.

je n'ai aucun problème avec les autres fichiers (ls sortie):

489 Jan 4 19:34 100 
4.8K Jan 4 19:34 1000 
48K Jan 4 19:34 10000 
478K Jan 4 19:34 100000 
4.7M Jan 4 19:34 1000000 
47M Jan 4 19:34 10000000 

une idée?

grâce

PD: itoa Code:

char *itoa(int val, int base) { 

    static char buf[32] = {0}; 
    int i = 30; 
    for(; val && i ; --i, val /= base) 
     buf[i] = "abcdef"[val % base]; 
    return &buf[i+1]; 
} 
+0

@Joe: c'est un tableau statique. –

+0

@Joe c'est statique ... –

+0

Je ne connais pas la faute de seg, mais n'essayez pas d'utiliser cette fonction 'itoa()' avec quelque chose de moins que ou égal à '0'. –

Répondre

0

Depuis vous avez dit que fopen("10000000","r"); échoue aussi, je vais aller sur une branche et dire que fopen() échoue et retourner un NULLFILE*. Lorsque vous utilisez par la suite ce pointeur de fichier, vous obtenez une erreur seg.

fopen() peut échouer en raison d'un problème de permissions peut-être - je ne sais pas.

Vérifiez si oui ou non fopen() réussit, et en cas d'échec de vidage errno.

+0

Non, fopen ne réussit pas. Mais j'ai découvert quelque chose: la faute de segmentation est toujours à la fopen. Mais si j'essaie fopen ("10000000", "r"); compilant avec SZ = 10000000 il se bloque. Mais si je compile avec SZ = 1000000 cela fonctionne .. Semble que le problème est ailleurs, mais il se bloque toujours à fopen comment est-ce possible? –

+0

ok, nevermind le problème est dans l'initialisation d'un tableau int avec 10000000 éléments. Je ne comprends toujours pas pourquoi le seg. La faute apparaît toujours à la fopen (vérifié avec gdb). En tout cas merci à tous pour votre aide! Maintenant, j'ai juste besoin de savoir comment créer un tableau 10000000 positions :) –

+0

ah bien l'erreur montre à la fopen parce que la déclaration du tableau était juste avant .. je n'étais pas très intelligent à celui-ci haha ​​ –

Questions connexes