Days ago a mate asked me a favor in his code and I got trouble in dynamic pointer and dynamic memory allocation.
Well, one-dimensional pointer is easy to use, and you can easily expand it’s occupied memory size by using realloc() as following:
#include <iostream>
using namespace std;
int n=2,* pint;
void Initialization()
{
pint=new int[n];
}
void DoSomething(){}
int main()
{
Initialization();
DoSomething();
pint=(int*)realloc(pint,(++n)*sizeof(int));
pint[n-1]=123456;
cout<<pint[n-1]<<endl;
return 0;
}
</pre>
But when it comes to the two-dimensional pointer, it nolonger works if you write some code like this:
<pre lang="cpp" line="1" file="code2.cpp" colla="+">
#include <iostream>
using namespace std;
int n=2,len=20;
char** ppchar;
void Initialization(){
ppchar=new char*[n];
for(int i=0;i<n;i++){
ppchar[i]=new char[len];
}
}
void DoSomething(){}
int main()
{
Initialization();
DoSomething();
ppchar=(char**)realloc(ppchar,(++n)*len*sizeof(char));
ppchar[n-1]="this is a new one";
cout<<ppchar[n-1]<<endl;
return 0;
}
That is because you failed to notify the system, or in other words declare the address of ppchar[n-1].
And here is a correct version of the same function by adding a statement between line 16 and 17:
ppchar[n-1]=new char[len];