954,500 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Debug assertion failed

Hi all,

I got this assertion problem that i cant seem to solve, could you guys help me on this. So far, i think the problem might be due to the while loop for the iterator line by line check and i have made changes to it but still cant solve it.

Debug assertion failed

file:f\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1317
Expression: _CrtIsValidHeappointer(pUserData)

file:f\dd\vctools\crt_bld\self_x86\crt\src\dbgheap.c
Line: 1419
Expression: _pFirstBlock == pHead

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e)

{
ifstream ckin("sample.txt");
int initclock = 0;

if (ckin==NULL)
{
MessageBox::Show ("not found");
ckin.close();
initclock++;
}

if (ckin!=NULL)
{
char checkEmpty;
ckin.get(checkEmpty);
if (!ckin.eof())
{textBox1->Text = "file empty";
ckin.close();
}
else
{textBox1->Text = "not empty";
ckin.close();
initclock++;
}
}
ifstream in("sample.txt");
string line;
string match("sample\:");
int clock = 0 ;
while (getline(in, line)&&(initclock==0))
{
stringstream sstrm(line);
string::iterator iter =
search (line.begin(),line.end(),match.begin(),match.end());
if (iter != line.end() )
{
iter = find_if( iter +match.length(), line.end(),not1(ptr_fun <int,int> (isspace)));
if (iter == line.end())
{
MessageBox::Show ("No numbers or words after Serial no. :");
break;
}
string::iterator j = find_if (iter, line.end(), ptr_fun <int,int> (isspace));
string found;
copy(iter, j, back_insert_iterator <string> (found));

//create a new file based on the word after said word
//and saved it into the said folder
string filename = found + ".txt";
string dirname = "log//";
string finaldir = dirname + filename;
ofstream(finaldir.c_str());
//using ifstream and ofstream to copy content of file to another
char * fbuffer;
long fsize;
ifstream cpy ("sample.txt",ios::binary);
ofstream target (finaldir.c_str(),ios::binary);
cpy.seekg(0,ifstream::end);
fsize=cpy.tellg();
cpy.seekg(0);
fbuffer = new char [fsize];
cpy.read (fbuffer,fsize);
target.write (fbuffer,fsize);
delete[] fbuffer;
cpy.close();
target.close();

//write the found word/serial no. into temp.txt
const char * buffer=found.c_str();
string str (found.c_str());
int sizeNum = str.length();
long size = sizeNum;
ofstream outfile ("store.txt");
outfile.write (buffer,size);
//delete[] buffer;//release dynamically allocated memory
outfile.close ();
//textbox update and check if previous saved name is the same as
//current one
textBox2->Text = System::IO::File::ReadAllText("store.txt");
if (textBox2->Text == label3->Text) {
MessageBox::Show ("no. repeated");
}
else
{
label3->Text = textBox2->Text;
}
//try to use an empty file to write and empty a file
//which is being used by another program
char * ebuffer;
long esize;
ifstream ecpy ("void.txt",ios::binary);
ofstream etarget ("sample.txt",ios::binary);
ecpy.seekg(0,ifstream::end);
esize=ecpy.tellg();
ecpy.seekg(0);
ebuffer = new char [esize];
ecpy.read (ebuffer,esize);
etarget.write (ebuffer,esize);
delete[] ebuffer;
ecpy.close();
etarget.close();
textBox1->Text = "done";
clock++;
in.close();
if (clock!=0)
break;
}//if iter
else
{
textBox1->Text = "not found";
}
}//while
}

integer*09
Light Poster
40 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

You've trashed your allocated memory pool.
Unfortunately, the code you've posted is probably OK (if you've been staring at it for that long without solving the problem).

The thing of it is, where the fault occurred (the real code you need to fix) is seldom the same as the code which notices there's a problem (the code you posted). It's this remoteness of "cause" and "effect" which really takes the time in solving these kinds of problems.

The fact that your code hasn't crashed up to now just makes you lucky, not good.

What you do about it now however is harder to say.
You could look at the MALLOC_DBG options, and cause it to call the pool-checking functions on every alloc/free call. This will slow it down, but it will notice the problem a lot sooner.

Salem
Posting Sage
Team Colleague
11,531 posts since Dec 2005
Reputation Points: 5,862
Solved Threads: 953
 

The weird part is that it had no problem compiling and executing in any com with vc++ 2008 express edition.

Initially, it could not even be executed in com without vc++ express installed, come with error saying->"application failed to start because application configuration is incorrect. reinstalling the application may fixed the problem".

I did followed msdn example of copying the msvcr, msvcm, msvcp.dll and a manifest file into the same folder as the .exe file for those com which dont have vc++ express installed.

Then it was able to execute but disappointingly come with the above mentioned error which i cant seem to solve.

Current changes are those ifstream i had changed to fstream but still cant solve it.

Can someone kind enough to spare some time on this and give me some advices, pointers or any link that can assist me.

Thanks in advance.

integer*09
Light Poster
40 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

On the folder "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86" on the PC with installed Visual Studio 8 placed the file "vcredist_x86.exe" (for VS 2008 installation there are similar redistributable package). Sometimes running this installer on the machine without installed development environment can bring better results than copying the required MFC and CRT dlls to the system PATH of that computer.

writem
Newbie Poster
8 posts since Jun 2008
Reputation Points: 11
Solved Threads: 2
 
On the folder "C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\BootStrapper\Packages\vcredist_x86" on the PC with installed Visual Studio 8 placed the file "vcredist_x86.exe" (for VS 2008 installation there are similar redistributable package). Sometimes running this installer on the machine without installed development environment can bring better results than copying the required MFC and CRT dlls to the system PATH of that computer.

Thanks for your reply.

I have tried installing the vcredist_x86 on target com with no Microsoft Visual studio but it cant even be executed. after pasting the dlls then it can be executed.

during debugging, after i exited my program i saw red wording in the stack frame:xxx.exe!main(array^args={Length=0})Line 17.

Anyone know what causes this? or is this the cause to my assertion failed?

int main(array<System::String ^> ^args)
{
// Enabling Windows XP visual effects before any controls are created
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);

15. // Create the main window and run it
16. Application::Run(gcnew Form1());
17. return 0;
18. }

integer*09
Light Poster
40 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 

Brian MuthMVP

You should be aware that you cannot legally redistribute the msXXXd.dll's in this manner. They are not redistributable.

To deploy a c++ application properly you should read the following material:

How to Deploy C++ Properly Deployment (C++) How to redistribute the Visual C++ Libraries with your application Windows Installer Deploying .NET Framework Applications

Above reply is from the msdn forum for VC++.

Im glad that the problem is not due to my code but because vc++ express is free so it has its limitation. Sad and angry that i spent quite a considerable amount of time on it which seem is fruitless.

integer*09
Light Poster
40 posts since Jun 2008
Reputation Points: 10
Solved Threads: 0
 
shijobaby
Newbie Poster
14 posts since Jul 2009
Reputation Points: 4
Solved Threads: 1
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You