0

I am writing to a file using a pointer variable that points to my File object, which includes the method used to write to my text file. When I try to delete the memory my program crashes... The error does not occur when I comment out the "delete file;" line. The rest of the code runs succesfully apart from the delete function. I want to avoid any possible memory leaks, please help.

Here's my code:

void change_registry_config(){
    try{
        file = new Files(file_path[1], WRITE_TO_FILE, IOS_OUT);   //predefined class

        set_data();   //function that overwrites the data in the vector

        file->write_file(*data);   //writes vector to file
    }catch(file_ex ex){
        SetWindowTextA(hEdit, ex.what());   
    }catch(exception e){

    }

    if(file != NULL){
        delete file;    //error occurs here, possible memory leak
    }
}

Code in header file used to write to file:

void Files::write_file(std::vector<std::string>& vect){

        if(!write_out->fail()){
            for(unsigned i = 0; i < vect.size(); i++){
                *write_out << vect.at(i) << std::endl;
            }
            write_out->close();  
        }else{
            file_ex er;   //custom error class extending std::exception
            er.set_msg("Could not access file");
            throw er;
        }
    }

Edited by Search_not: incorrect code

3
Contributors
3
Replies
17
Views
2 Years
Discussion Span
Last Post by rubberman
0

The obvious first response is don't build it on the heap. You're creating it and destroying it all within the function change_registry_config, so just make it on the stack (i.e. don't use new) and you don't have to worry about memory.

0

Thanks, moschops

0

You also don't declare the type of the variable "file". That, and you should NOT use NULL in C++ except for void* types. Use 0 instead. That is valid for any type of pointer. Some compilers will complain about that, especially if warnings are enabled.

This question has already been answered. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.