Программа, приведенная ниже, была создана для использования динамически выделяемой памяти ....
Но программа в конечном итоге аварийно завершает работу после добавления большего количества элементов в массив.
Этот код ясно показывает используемую концепциюи ошибка получена.
Итак, нет ли способа увеличить размер динамически распределяемого массива, так как здесь моя программа-пример требует большего размера после выделения памяти
#include<iostream>
using namespace std;
int main()
{
int n; char ch='y';
cout<<"Enter size of array: ";
cin>>n;
int *arr = new int[n];
cout<<"Enter elements: ";
for(int i=0;i<n;++i) cin>>arr[i];
// above code works fine, the below creates problem
while(ch=='y')
{ n++; cout<<"Enter 1 more element: "; cin>>arr[n];
cout<<"Want to enter more? "; cin>>ch;
}
cout<<"All elements are: ";
for(int i=0;i<n;++i)
cout<<arr[i]<<" ";
delete []arr;
return 0;
}
Это то, что показывает valgrind
==5782== Memcheck, a memory error detector
==5782== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==5782== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
==5782== Command: ./ec
==5782==
Enter size of array: 2
Enter elements:
1
2
Enter 1 more element: 3
==5782== Invalid write of size 4
==5782== at 0x4F3A890: std::istream::operator>>(int&) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
==5782== by 0x108BC7: main (in /home/user1/ec)
==5782== Address 0x5b8350c is 4 bytes after a block of size 8 alloc'd
==5782== at 0x4C3089F: operator new[](unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==5782== by 0x108B2A: main (in /home/user1/ec)
==5782==
Want to enter more? y
Enter 1 more element: 4
Want to enter more?
Показанные выше ошибки valgrind возрастают, когда концепция используется в любой большой программе ....