Вопрос 1:
Не обращайте особого внимания на это предупреждение. Он предупреждает вас о риске переполнения.
Чтобы избавиться от этого, и если вы используете Visual Studio, добавьте это в свой файл:
#pragma warning( disable : 4996 )
Я предполагаю, что 4996 является кодом этого предупреждения.
Вопрос 2:
То что у вас есть:
array1 = new T[N1];
означает, что array1 является указателем на T:
T * array1;
Давайте предположим, что N2 намного больше, чем N1, , хотя вы обнаружите, что sizeof (array1) равно sizeof (array2) .
Полагаю, это связано с тем, что sizeof (array1) возвращает память, выделенную для самого указателя, а не для значения, на которое указывает указатель, но не уверен в этом ~.
Простой тест:
char * tab1;
tab1 = new char[3];
char * tab2;
tab2 = new char[100];
if( sizeof(tab1) == sizeof(tab2) )
{
printf("equals");
}
вернет: "равно"
Чтобы решить эту проблему, попробуйте это :
std::vector<T> array1;
и рассмотрите возможность получения размера:
array1.size();