|
first of all I would like to mention that pointer to structure contains two variables 1. size of data and 2.Byte array to store the data. So following line is not applicable here
MessagData* pMessagData = reinterpret_cast<messagdata*>(chReadData);
Second thing i have to assign this data along with size means structure to some out pointer of same data type.that is why I have used memcpy.but after assigning it to out pointer i m trying to delete this memory(which I have assigned here as shown in code.
And i would like to add one more thing in my question
I have made a queue as shown below
std::queue<messagdata*> qDataQueue;
initially I am pushing the structure pointer in one thread after filling the data as shown below
MessagData* pdata = new MessagData;
//read data is filled in pData
qDataQueue.push(pData)
Then in other thread i am poppin out this data in a pointer of same structure type and trying to delete that pointer then it is showing the mentioned error:
MessagData* pTempdata = qDataQueue.front();
//problem occurs in following line
delete pTempdata;
|
|
|
|
|
Rahul from Poona wrote: So following line is not applicable here I had mis-read your question, and assumed that the data was presented in that format. In your original question you do not specify how you get the value of dwSize , but assuming you have some way of finding it then you need to do something like:
struct MessagData
{
DWORD dwSize;
BYTE byData[1];
}
char chReadData[100];
int dwNumberRead;
MessagData* pMessagData = (MessagData*)new BYTE[sizeof(MessagData) + dwNumberRead];
memcpy(pMessagData->byData, chReadData, dwNumberRead);
pMessagData->dwSize = dwNumberRead;
[edit]Added quick and dirty cast[/edit]
BTW please use the code block and var buttons above to add the correct HTML tags, <pre> or <code> to your code rather than making it bold, as I have done here.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Rahul from Poona wrote: I m reading some data from device whose length I dont know at compile so I made
a structure as of following type to store data
What are you trying to do?
There is a common C idiom which might be applicable for what you are doing and which your structure would support - if you use it correctly.
It however isn't necessarily the best way to do that in all situations.
And as mentioned if you are not very CAREFUL then you can introduce some or all of the following problems.
- Memory leaks
- Crashes caused in any number of ways by pointer bugs.
The standard C idiom for this is found in the following link.
http://c-faq.com/struct/structhack.html[^]
Keep in mind that you must clean this up in the same way that you allocate it.
|
|
|
|
|
Finding crash information using the MAP file in vs2005(MAPINFO/LINES is not available)
|
|
|
|
|
Finding crash information using the MAP file[^]
"One man's wage rise is another man's price increase." - Harold Wilson
"Fireproof doesn't mean the fire will never come. It means when the fire comes that you will be able to withstand it." - Michael Simmons
"Show me a community that obeys the Ten Commandments and I'll show you a less crowded prison system." - Anonymous
|
|
|
|
|
I've used CrashFinder[^]quite successfully with VS2005 and even VS2010.
Good luck.
Karl - WK5M
PP-ASEL-IA (N43CS)
PGP Key: 0xDB02E193
PGP Key Fingerprint: 8F06 5A2E 2735 892B 821C 871A 0411 94EA DB02 E193
|
|
|
|
|
Have you got .pdb files? If so forget .map files. If not change how you do things and get them and forget .map files.
Steve
|
|
|
|
|
hi,
i have developed program using MFC in vs2008 and now trying to build single executable file (.exe file) so that it can be used on other PCs. my source file contains both .c and .cpp files. i have tried to compile/build the program in Release mode but getting errors like:
fatal error C1853: 'Release\readtxtfile.pch' precompiled header file is from a previous version of the compiler, or the precompiled header is C++ and you are using it from C (or vice versa)
so i changed the properties of precompiled header from Use Precompiled Header (/Yu) to Create Precompiled Header (/Yc) and now i'm getting errors like:
error C2857: '#include' statement specified with the /Ycstdafx.h command-line option was not found in the source file
can anyone help me in this regard. i.e how to make executable file with source file containing both .c and .cpp files.
Regards
Jawad
modified 10-Sep-12 23:18pm.
|
|
|
|
|
This precompiled header setting isn't a per-project setting. Set it to "Use Precompiled Header" in the project and inherit this setting in all your .c and .cpp files. After this open the properties windows individually for your stdafx.cpp file and set its precompiled header setting to "Create Precompiled Header". The next step is to select all .c files and open the properties window for them and set the precompiled header setting to "Not Using Precompiled Header". Make sure that you don't include stdafx.h in your .c source files.
modified 3-Sep-12 8:20am.
|
|
|
|
|
thank you pasztorpisti for your reply.
i configured my project to release mode from Configuration Manager and did what you earlier suggested. it builds without errors but when i run exe file, one of the serial ports does not open and gives error 0x7B (system error code). it runs fine (both serial ports open) when build in debug mode. any idea what is happening?
Regards
Jawad
modified 5-Sep-12 2:25am.
|
|
|
|
|
That's a bug in your code or one of the libraries you use.
|
|
|
|
|
sorry, i didn't understand. what kind of bug we are talking about? i didn't understand the reason behind this. can you please tell me why this behavior is happening (i.e running fine in debug mode but in release mode, opens one port and not the other)?
Regards
Jawad
|
|
|
|
|
There are many reasons for a buggy program to behave differently in debug/release mode. For example code optimization can sometimes screw up your code even if its otherwise non-buggy. Fortunately visual C++ is quite safe in this regard so I wouldnt search for something like this. The most dangerous difference between release builds is memory management/allocation. Debug builds use special values to fill up your stack/heap memory areas when they are allocated to detect programming mistakes (like when you try to use uninitialized variables). This fill doesn't happen when you run your program in release mode resulting in different behavior. Another problem is that even if your build is in Release mode the allocated memory is filled with zeros (not the same value as in debug builds) if you start your executable from your ide by debugging it! For this reason sometimes the bug occurs only if you start the exe from outside your IDE and then attach to it with your debugger. I would search for some uninitialized variables/members...
|
|
|
|
|
thak you so much pasztorpisti. that was really helpful
Regards
Jawad
|
|
|
|
|
Delete the .pch file, it's not a source file.
Steve
|
|
|
|
|
If all source files are in a single project then change the .c files to .cpp and try building again.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Legacy source might not compile that way and its constant hassle to upgrade some 3rd parties that come in .c files.
|
|
|
|
|
I know, I have been through similar exercises in the past, but sometimes it just needs to be done.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Hi i need to show the C++ program in a release version could you help me, how to create an executable file for that.
Please let me know if any one could help me. I was trying to make it but few unknow exceptions i couldn’t solve.
my id: ksandeepvarma1@gmail.com
|
|
|
|
|
Hi,
How do I download/copy a file from a remote drive to my local drive. I know the use of API "CopyFile" but what I would like to accomplish is download a big file ~20Mb in packets of 4096bytes. Please help...
Sunil
|
|
|
|
|
Use file I/O, reading and writing one block at a time; see CreateFile() [^] and associated functions.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
i want to make character to hexadecimal conversion dailog based application in mfc....i am new to mfc please help me
send the code to ritu.libra91@gmail.com
ritu
|
|
|
|
|
Please do not ask for complete code. Converting characters to hexadecimal representation can be performed quite easily with either the printf() [^] or cout [^] functions. Neither of which has anything to do with MFC.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Since he left his email address here chances are good we never see this user here. Who has the permissions to edit and remove the email address from the message?
|
|
|
|
|
I think only admins can do that. Strange really, since you and I can edit questions in the Q&A section.
One of these days I'm going to think of a really clever signature.
|
|
|
|