Here is part of my code:
extern "C" REGISTRATION_API int extreme(char* lKey)
{
string s1;
char *p=NULL;
try
{
ifstream myfile ("extreme.txt");
int i=0;
if (myfile.is_open())
{
while (getline(myfile,s1))
{
switch (i)
{
case 1:
strcpy(p,s1.c_str());
lKey=p;
break;
//continue here
}
}
}
}
Now when I call this function from external application, I get this error:
AccessViolationException:
Attempted to read or write protected memory. This is often an indication that other memory is corrupt.
The problem is due to this:
lKey=p;
How can I assign the lKey
to p
?
You need to pre-allocate the memory which you pass to
strcpy
. I.e. ap = new char[s1.length()+1];
will do it (+1 for the terminating 0 character). However, it's not a good idea to mix upstd::string
and C string routines for no good reason. Better stick withstd::string
, it will save you a LOTS of trouble.Also
lKey=p
won't work either -- it just copies the local address ofp
into the local variablelKey
. The caller won't even see a difference.Remember that a
char*
is just an address of a memory location. You need to have memory allocated at the address.In your code you don't have memory allocated to use and you didn't set p to point to that memory address.
strcpy
does not allocate a buffer, it just takes a memory address to copy the data to.If you are passing a buffer into the function then you probably want simply this (and remove p)
Actually the problem is
strcpy(p,s1.c_str());
sincep
is never set to anything but NULL.