Re: Returning Char array/pointer? Continuing of thread I am confused
with these concepts.
Sorry, Did not see your reply before I post my last test.
Now I got it. pass the reference of the pointer so that in the
function when I do the new char[], it will allocate memory and change
the pointer's value to this newly allocated memory address.
But one more question:
When you pass by reference, you are indeed calling malloc (or new)
on the original pointer.
So the c++ implicitly malloc memory to my pointer when I pass it by
reference, how does c++ know how many byte memory this pointer point
to needed? OR c++ does not know until I call new in the function?
Thanks for your explanation, I am very new to this passing reference
of pointer thing.
On Feb 11, 6:02 pm, David Wilkinson <no-re...@effisols.com> wrote:
rockdale wrote:
I am doing a small testing on this topic.
------------------------------
char* myByte;
long lngSize = 0;
lngSizeR = CMyUtil::ReadFile2ByteArray2("myFile",myByte);
CMyUtil::WriteByteArray2File2(myByte,lngSize, "myFile2");
delete[] myByteR;
-----------------------------------
I got an error when calling WriteByteArray2File2, myByte pointed to a
invalid pointer oxffffffff. and the error is
Access violation reading location 0xffffffff.
Any explaination, expecially somebody who answered my previous thread,
you may understand why ai am stick on this topic.
--------------------------------------------------------
void WriteByteArray2File(const char* aSrcArr, long aSize, char const*
aDestFile){
ofstream out(aDestFile, ios::binary);
if(!out)
throw exception("Could not open output file" );
out.write(aSrcArr, aSize);
out.close();
}
long ReadFile2ByteArray2(char const* aSrcFile, char* aDestArr){
long lngFileSize = 0;
int intBeenRead = 0;
ifstream in;
in.open(aSrcFile, ios::in| ios::binary | ios::ate);
if(in.is_open()||in.bad())
{
lngFileSize = in.tellg();
}else{
throw exception("could not open input file"); // =
could not open in
file
return 0;
}
aDestArr = new char[lngFileSize+1];
in.seekg(0,ios::beg);
in.read(aDestArr, lngFileSize);
aDestArr[lngFileSize] = '\0';
in.close();
return lngFileSize;
}
----------------------------------------
Rockdale:
One more time... You must pass the pointer by reference if you want to cha=
nge it
in the caller:
long ReadFile2ByteArray2(char const* aSrcFile, char*& aDestArr);
--
David Wilkinson
Visual C++ MVP- Hide quoted text -
- Show quoted text -