Другие языки программирования и технологии
C++ Шаблоны с массивами
Вообщем написал программку для подсчета среднего всех элементов массива. Требовалось по условию использовать шаблоны. Решил использовать динамические массивы. Когда запускаю, то все нормально вводится, но стоит ввести последний элемент, так тут же выскакивает окно с сообщение об ошибке в куче. Если удаляю в программе строки с высвобождением динам. памяти., то всё работает. В чем проблема. #include <iostream> #include <conio.h> using namespace std; template <typename> X **vvod(X **mas, int str, int stb) { for(int i=0; i<str;> Z srednee(Z **mas, int str, int stb) {Z s=0; for(int i=0; i<str;>[j]; return (s/(str*stb)); } int main() { int stb,str; cout<<"vvedite kol-vo stolbcov = "; cin>>stb; cout<<"vvedite kol-vo strok = "; cin>>str; float **massive=new float*[str]; for(int i=0; i<str;>=new float; } vvod(massive, str, stb); print(massive, str, stb); cout<<srednee(massive,>; i=i+1;} delete[] massive; getch(); return 0; }
а ты размер строки неправильно делаешь
massive[ i ] = new float[ i ] float[ stb ];
massive[ i ] = new float[ i ] float[ stb ];
Это значит что неправильно динамически выделяешь память
Я бы сделал проще
template<class T>
T* CreateArray2D(int Y, int X)
{
return new T[Y * X];
}
template<class T>
void DeleteArray2D(T* pArray)
{
delete [] pArray;
}
template<class T>
void PrintArray2D(T *pArray, int Y, int X)
{
for (int i = 0; i < Y; i++)
{
for (int j = 0; j < X; j++)
{
cout << "A[" << i << "][" << j << "]\t" << pArray[j] << "\n";
}
pArray += X;
}
}
template<class T>
void InputArray2D(T *pArray, int Y, int X)
{
for (int i = 0; i < Y; i++)
{
for (int j = 0; j < X; j++)
{
cout << "введите A[" << i << "][" << j << "]\t";
cin >> pArray[j];
}
pArray += X;
}
}
template<class T>
T AveArray2D(T *pArray, int Y, int X)
{
T Ret = 0;
for (int i = 0, n = Y*X; i < n; i++)
{
Ret += pArray[ i ];
}
return Ret;
}
int main()
{
int Y, X;
cout << "введите число строк ";
cin >> Y;
cout << "введите число столбцов ";
cin >> X;
float *p = CreateArray2D<float>(Y, X);
InputArray2D(p, Y, X);
PrintArray2D(p, Y, X);
cout << "среднее " << AveArray2D(p, Y, X) << "\n";
DeleteArray2D(p);
return 0;
}
Я бы сделал проще
template<class T>
T* CreateArray2D(int Y, int X)
{
return new T[Y * X];
}
template<class T>
void DeleteArray2D(T* pArray)
{
delete [] pArray;
}
template<class T>
void PrintArray2D(T *pArray, int Y, int X)
{
for (int i = 0; i < Y; i++)
{
for (int j = 0; j < X; j++)
{
cout << "A[" << i << "][" << j << "]\t" << pArray[j] << "\n";
}
pArray += X;
}
}
template<class T>
void InputArray2D(T *pArray, int Y, int X)
{
for (int i = 0; i < Y; i++)
{
for (int j = 0; j < X; j++)
{
cout << "введите A[" << i << "][" << j << "]\t";
cin >> pArray[j];
}
pArray += X;
}
}
template<class T>
T AveArray2D(T *pArray, int Y, int X)
{
T Ret = 0;
for (int i = 0, n = Y*X; i < n; i++)
{
Ret += pArray[ i ];
}
return Ret;
}
int main()
{
int Y, X;
cout << "введите число строк ";
cin >> Y;
cout << "введите число столбцов ";
cin >> X;
float *p = CreateArray2D<float>(Y, X);
InputArray2D(p, Y, X);
PrintArray2D(p, Y, X);
cout << "среднее " << AveArray2D(p, Y, X) << "\n";
DeleteArray2D(p);
return 0;
}
лучше заливайте на http://pastebin.com/ , а то с картинки перенабирать напряжно.
Похожие вопросы
- C++ задача про массив
- C++ шаблоны
- C#. Элементы одномерного массива размером 7, которые больше среднего значения элементов массива, заменить на 0.
- C++ поэлементное соденение массивов
- C++ задание по массивам
- C++. Шаблоны функций
- Помогите пожалуйста написать программу на c++. Циклически сдвинуть массив на k элементов влево.
- Что делаю не так? C++.Удаление элемента массива
- C++ многомерный ассоциативный массив
- C++ Двухмерный массив с случайными не повторяющимися числами.