Re: new() and memcpy()
barcaroller wrote:
Is it safe to use the result of 'new int[100]' in a memcpy().
Example:
int* cpp_block = new int[100];
int* c_block = some_c_function();
memcpy(cpp_block, c_block, 100);
I suspect cpp_block may be pointing to more than just a simple array of
integers.
If it's not safe, I could use a vector instead of the 'new int[100]' but how
do I initialize the vector using the C-style array without having to iterate
over the vector one integer at a time?
If you haven't overloaded the new operator, this is what it does
(pseudo code):
int* cpp_block = (int*)malloc( sizeof(int) * 100 );
for ( int i = 0; i < 100; ++i )
cpp_block[i]::int();
so yes, there is nothing more magical about the default new operator.
It is safe to copy it around (obviously the size of not 100, but
sizeof(int)*100, but i assume that you know what your doing)
run this code to see:
int * new_arr = new int[100];
int * old_arr = (int*)malloc( sizeof(int)*100 );
memset( old_arr, 0, sizeof(int)*100);
unsigned char* new_begin = (unsigned char*)new_arr;
unsigned char* old_begin = (unsigned char*)old_arr;
for ( int i = 0; i < sizeof(int)*100; ++i )
{
if ( *new_begin++ != *old_begin++ )
cout << "problem!" << endl;
}
delete[] new_arr;
free(old_arr);
On May 4, 6:21 pm, "barcaroller" <barcarol...@music.net> wrote:
Is it safe to use the result of 'new int[100]' in a memcpy().
Example:
int* cpp_block = new int[100];
int* c_block = some_c_function();
memcpy(cpp_block, c_block, 100);
I suspect cpp_block may be pointing to more than just a simple array of
integers.
If it's not safe, I could use a vector instead of the 'new int[100]' but how
do I initialize the vector using the C-style array without having to iterate
over the vector one integer at a time?