2009-09-13 3 views
2

Когда я пытаюсь открыть файл для чтения в моем консольном приложении, я получаю это сообщение об ошибке: «Необработанное исключение в 0x1048766d (msvcp90d.dll) в homework1.exe: 0xC0000005: место записи нарушения доступа 0x00000000. " Он отлично работает, когда я компилирую и запускаю программу на моем macbook, но когда я запускаю ее на своем рабочем столе, используя VS 2008, она дает мне эту ошибку.Ошибка C++ при открытии файла

вот мой код:

 
int main (void){ 



    //Open 1st file (baseproduct.dat) 
    ifstream fin; 
    //fin.open(filename.c_str()); 
    fin.open("baseproduct.dat"); 

    int tries; 
    tries = 0; 
    while(fin.bad()) 
    { 
     if(tries >= 4) 
     { 
      cout > filename; 
     fin.open(filename.c_str()); 

     tries++; 

    } 

    SodaPop inventory[100]; 

    //read file into array 
    string strName; 
    double dblPrice; 
    int i; 
    i = 0; 
    fin >> strName; 
    while(!fin.eof()) 
    { 
     inventory[i].setName(strName); 

     fin >> dblPrice; 
     inventory[i].setPrice(dblPrice); 

     fin >> strName; 
     i++; 
    } 
    fin.close(); 

    cout > filename; 

    //fin.open(filename.c_str()); 
    fin.open("soldproduct.dat"); 

    tries = 0; 
    while(fin.bad()) 
    { 
     if(tries >= 4) 
     { 
      cout > filename; 
     fin.open(filename.c_str()); 

     tries++; 

    } 

    //read file into array 
    i = 0; 
    fin >> strName; 
    while(!fin.eof()) 
    { 
     cout > dblPrice; 
     inventory[i].setPrice(dblPrice);*/ 

     fin >> strName; 
     i++; 

     //1. search array for name 
     //2. get price (what should happen with it?) 
     //3. add # sold to quantity 
    } 
    fin.close(); 
cout
+0

теги кода, похоже, не отображают весь код, но компилируются без ошибок, поэтому я не уверен, что происходит ... – cskwrd

+0

Не могли бы вы отметить точную строку, в которой было выбрано исключение? – mmmmmmmm

+0

'cout> filename;' <--- Какая должна быть линия? – derobert

ответ

1

Если вы хотите проверить, если файл открыт или нет, не используйте fin.bad() вместо:

while(!fin.is_open()) 
{ 
... 
} 
+0

Спасибо, AraK! Ваше решение сработало. – cskwrd

0

Убедитесь, что у вас есть разрешение на открытие файла: как написать и разрешения на чтение.

0

Как вы гарантируете, что все еще есть место в инвентаре при чтении файлов? Инвентаризация - это фиксированный размер, файл по сути не является ... Может быть, возможно, что индекс инвентаря указывает, в конце концов, после самого массива, вызывая нарушение доступа?

Это зависит от компилятора и времени выполнения, чтобы выбрать, реагировать ли он на состояние индекса из условия. Возможно, при компиляции в режиме выпуска, даже VS2008 не жалуются ...

+0

Я должен был уточнить, я знаю, что в первом файле никогда не будет более 100 уникальных продуктов. – cskwrd

0

Try размещение точки останова в частях вашего кода при использовании VS2008.

Вы можете проверить линию на линию, нажав F10 и посмотреть, где она сработает; это линия, на которую вы хотите посмотреть.

Смежные вопросы