2011-09-05 5 views
0
// diskbin.cpp : main project file. 

#include "stdafx.h" 
#include <windows.h> 
#include <iostream> 
#include <fstream> 
#include <conio.h> 
#include <stdio.h> 
#include <sys/stat.h> 

using namespace std; 

int main(int argc, char *argv[]) 
{ 
    //code 

    if(stat("key.pc.db", &filek) ==0) 
     sizek=filek.st_size; 
    if(stat("seek.pc.db", &files) ==0) 
     sizes=files.st_size; 

    sizek=sizek/sizeof(int); 
    sizes=sizes/sizeof(int); 
    int i,min,max,mid; 
    int *s=new int[sizes]; 
    int *hit=new int[sizes]; 

    //code 
} 

Quand je lance ce programme dans Visual Studio 2008, je ne reçois aucune erreur mais quand je lance le cmd ouvre et ferme puis suivie d'une fenêtre pop-up qui dit: " Une exception non gérée de type «System.AccessViolationException» s'est produite dans diskbin.exe Informations supplémentaires: Vous avez tenté de lire ou d'écrire de la mémoire protégée, ce qui indique souvent que la mémoire est corrompue. Quel pourrait être le problème? N'ai-je pas alloué s et frappé correctement?System.AccessViolationException dans Visual Studio 2008

Merci!

+0

Soit vous n'obtenez aucune erreur, soit vous obtenez une erreur. Choisissez-en un. –

+0

Effectuez un débogage. Sur quelle ligne le programme plante-t-il? –

+0

@Martino Je voulais dire qu'il n'apparaît pas dans la fenêtre d'erreur. Il montre 0 erreurs et 0 avertissements. – Ava

Répondre

2

Il est plantage parce que vous utilisez des variables non initialisées:

int  sizes, sizek; 
    struct stat files, filek; 
    ofstream ofs; 

    if(stat("key.pc.db", &filek) ==0) 
     sizek=filek.st_size; 
    if(stat("seek.pc.db", &files) ==0) 
     sizes=files.st_size; 

    sizek=sizek/sizeof(int); 
    sizes=sizes/sizeof(int); 

si stat() échoue, vous utilisez un sizek non initialisée. En fonction de la mémoire non initialisée, votre relevé plantera:

int *s=new int[sizes]; 

parce sizes peut être négatif ou d'un très grand nombre et le nouveau échouera.

Vérifiez l'erreur renvoyée par stat(), bien qu'il soit possible que le fichier key.pc.db ne soit pas trouvé, provoquant l'échec de la fonction.

+0

hmm J'ai posé une question similaire hier et il m'a été suggéré d'utiliser new. Je n'ai pas de valeur constante pour l'affecter. Que puis-je faire d'autre? – Ava

+0

n'utilisez pas de valeur constante. La cause est stat() échoue, vous devriez étudier cela, ne pas changer votre code juste pour que cela fonctionne. Vérifiez si les fichiers sont là. –

+0

Consultez également http://msdn.microsoft.com/en-us/library/14h5k7ff(VS.71).aspx et recherchez les raisons de l'échec. –