|
We don't know if he allocates the memory several times or not. But something that is sure is that this is not the source of the crash: allocating several times memory without freeing it lead to memory leaks but it won't crashes for sure. So the problem must be somewhere else...
But still, your suggestion is good: memory leaks are a bad programming practice
|
|
|
|
|
Cedric Moonen wrote: But still, your suggestion is good: memory leaks are a bad programming practice
You are Right (as Always).. But i believe original author never mention there is crash , here is original comment from vikas :-
I get a error at the delete keyword ,
Damage After normal Block 0x00000034
am i wrong some where
this type of error/message usually occur when there is memroy leak...
[ot] anyways... Hows your Xmas prepartion going on.... Marry Xmas
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
ThatsAlok wrote: this type of error/message usually occur when there is memroy leak...
Nopem this type of error occur when the pointer of your array has been corrupted (there are some bytes in front of your data that contains information about your array, such as the size and things like that, and these bytes are being overwritten). This may come because you write outside the bounds of the memory that is just before your array.
ThatsAlok wrote: Hows your Xmas prepartion going on.... Marry Xmas
Lot of things to do during these holidays (visiting families and things like that). Merry Christmas to you also !
|
|
|
|
|
Cedric Moonen wrote: this type of error occur when the pointer of your array has been corrupted (there are some bytes in front of your data that contains information about your array, such as the size and things like that, and these bytes are being overwritten).
It seems its very rare error.... could you give me some example relating to same
Cedric Moonen wrote:
Lot of things to do during these holidays (visiting families and things like that). Merry Christmas to you also !
yeap thanks
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
If I remember correctly (not sure anymore), this can happen when for example int this case:
class MyClass<br />
{<br />
char Temp1[10];<br />
char Temp2[10];<br />
}
And then, you copy something that is bigger than 10 char in the Temp1 array. Not sure that this will generate the error each time, you have to check it
|
|
|
|
|
Well, I maintain that the message observed Damage After normal Block 0x00000034 is usually encountered when you overwrite a guard byte at the end of an allocated memory block. Internally, the memory pool manager reserves a 'few' extra bytes at the end of an allocation because these stupid c-string off by one errors are so F_____G common. So, when you go to free the memory, the memory pool manager code checks the guard bytes to see if the values have change (yes, he over wrote one of them with a zero) and it issue a warning.
No shirt, no shoes, no brains, no service.
|
|
|
|
|
No , i am not allocating the memory
many times i have just done it once
its not the cause
Vikas Amin
Embin Technology
Bombay
vikas.amin@embin.com
|
|
|
|
|
vikas amin wrote: many times i have just done it once
ohh, in that case why don't you use CString or stl::string class... is there any problem using them
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
vikas amin wrote: In my class the code is as
char *m_FileName;
m_FileName=new char[strlen(FileName)];
strcpy(m_FileName,FileName);
are you calling this code in Constructor or some where else... You have delete memory every time you allocate it.. it seems you allocating memory many times but deallocating only one time, at time of destruction.
better use CString class instead of new
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
VC Forum Q&A :- I/ IV
|
|
|
|
|
ThatsAlok wrote: are you calling this code in Constructor or some where else... You have delete memory every time you allocate it.. it seems you allocating memory many times but deallocating only one time, at time of destruction.
Good point using the example code I gave earlier the fix would be to add this to the MyClass class
//constructor
MyClass() { mystring = NULL; } // could also create a constructor that assigns the string
~MyClass() { if (mystring) delete[] mystring; }
SetMyString(const char* const newString)
{
if (mystring) delete[] mystring;
mystring = new char*[strlen(newString)+1];
strcpy(mystring, newString);
}
|
|
|
|
|
|
So, you still get the crash apparently... Are the two files (the header and the source file) big ? If not, post them completely, we will try to help you. Cause with the suggestion we gave you, it should work, so the problem is probably elsewhere: you probably write outside some other boundary that overwrite on the m_FileName address (thus corrupting some internal information at the begining of the array).
|
|
|
|
|
Ok i will just docment the files
and send u .
Vikas Amin
Embin Technology
Bombay
vikas.amin@embin.com
|
|
|
|
|
Hello !
I have a problem in my solution which use extensively STL.
When we remove pointer from list<> in A.dll to B.dll [OK]
When we put back from B.dll to A.dll [ACCESS VIOLATION]
We have : prim.dll, env.dll and app.exe (multithread)
[prim.dll] Shape* newLine();
[app.exe] list<Shape*> obj;
[env.dll] list<Shape*> undo;
The senario :
[create line] Shape* line=newLine(); obj.push_back(line);
[delete line] obj.remove(line); undo.push_back(line);
[undo delete] obj.push_back(undo.front());
[problem ] obj.front()=0xfeeefeee
Object was never delete until now, but we got an invalid pointer. Your idea and comments would be very helpful.
Thanks.
|
|
|
|
|
Did you accidentally mix-up the calls? Maybe you deleted it during one call because you swapped two lines of source?
Or you have a , where a ; should be?
Cheers,
Sebastian
--
Contra vim mortem non est medicamen in hortem.
|
|
|
|
|
Thank you for your comments. I would scan for , and ; misplaced.
Sovann.
|
|
|
|
|
I'm not new to programming, I am however new to Visual Studio C++. I'm adapting an old engine to use some newer libraries. I know the code in the new libraries is fine as we use it in several other projects, however whenever I try to call some functions in this one project I get LNK2019 errors.
A sample of the message is:
st_model.obj : error LNK2019: unresolved external symbol "public: static void __fastcall Graphics::NodeBin::QueueForDelete(class Graphics::Node *)" (?QueueForDelete@NodeBin@Graphics@@SIXPAVNode@2@@Z) referenced in function "public: void __thiscall Tool::Model::Free(void)" (?Free@Model@Tool@@QAEXXZ)
with the source code generating the error :
st_model.cpp
<br />
#include "gr_node_bin.h"<br />
<br />
namespace Tool<br />
{<br />
void anyfunction()<br />
{<br />
<br />
::Graphics::NodeBin::QueueForDelete(NULL);
<br />
}<br />
}
the QueueForDelete interface
gr_node_bin.h
namespace Graphics<br />
{<br />
class NodeBin<br />
{<br />
<br />
public:<br />
<br />
static void QueueForDelete(Graphics::Node *node);<br />
<br />
};<br />
}
the QueueForDelete implementation
gr_node_bin.cpp
namespace Graphics<br />
{<br />
<br />
void NodeBin::QueueForDelete(Graphics::Node *node)<br />
{<br />
}<br />
<br />
}
I've tried several different calling conventions within the project but they don't seem to have any effect.
Can anyone help me here? Are there any decent online references to tell me what the symbols mean?
|
|
|
|
|
Nevermind. One of the dependancies wasn't ticked in the project settings. Don't you just love when something that looks so complex turns out to be so simple.
|
|
|
|
|
I dont know the solution of ur problem
but
the symbols are generated by the compiler
which is know as NAME MANGLING .
It is essential in C++ as there are overloaded
functions , and the compiler have to differenciate
them .so it generate a different name for it .
could not find much detials u see this site
http://www.cs.virginia.edu/~cs216/labs/lab6/Linking/MS%20Visual%20C++%20and%20Assembly.htm
http://www.google.co.in/search?hl=en&q=vc+compiler+changes+the+name+of+function&btnG=Google+Search&meta=
Vikas Amin
Embin Technology
Bombay
vikas.amin@embin.com
|
|
|
|
|
Thanks. Now that you mention it name mangling rings a bell.
|
|
|
|
|
You can get your 'unmangled' names declared this way:
<br />
extern "C" {<br />
#include "gr_node_bin.h"<br />
}<br />
In other words, when you include header in CPP file for that of library written in C, you need to let compiler know now to make your OBJ look for UN-mangled names, since they will be UN-mangled in the other C-style library.
No shirt, no shoes, no brains, no service.
|
|
|
|
|
Does somebody have same problem with menu ownerdrawing?
http://zero.clarionlife.net/Images/problem.jpg
|
|
|
|
|
If you have MSDN installed there is a sample project called ctrltest.
Try to search for it in the CD or hard disk (if you have it on disk).
It is a good example for "OwnerDrawn" (not me;P) menus for starters.
Hope this will help.
Happy christmas friends. May the Love of My Lord and Saviour Jesus bring forth Joy and Happiness into your life too.
<marquee direction="up" height="50" scrolldelay="1" step="1" scrollamount="1" hspace="2" vspace="2">
--Owner Drawn
--Nothing special
--Defeat is temporary but surrender is permanent
--Never say quits
--Jesus is Lord
|
|
|
|
|
Hello, everyone,
We developed a programe, when our client take tese.
In his computer , when he push a button (the button is about Version Information), the program will crush.
But in our computer, the environment is same as his, but everything gones well.
He pass the error report image to us, from the image, we
can see the following informations:
AppName: our program, ModeName: mfc71u.dll
ModVer:7.10.30770 offset: 00033b40
Who can tell me how can we re-appear such crush
by the error report.
Thanks a lot!
|
|
|
|
|
Give the customer release DLLs or EXEs (whatever they are) with Debug Strings at the places where you might think crash has happened and then check the outputs.
|
|
|
|