函数:
void* realloc(void *ptr, size_t size);
功能: 函数将ptr 对象的储存空间改变为给定的大小size。 参数size可以是任意大小,大于或小于原尺寸都可以。 返回值是指向新空间的指针,如果错误发生返回NULL。
扩展内存
1 int main()
2 {
3 const size_t pSize = 15;
4
5 char *p = new char[pSize]{0};
6 strcpy_s(p, pSize, "I LOVE YOU");
7
8 cout << "p:" << hex << (int)p << endl;
9
10 p = (char *)realloc(p, pSize * 2);
12
13 if (!p)
14 cerr << "Call realloc function error!" << endl;
15
16
17 cout << "p1:" << hex << (int)p << endl;
18 _snprintf_s(p, pSize * 2, pSize * 2, "Hello,%s C++!", p);
19 cout << p<< endl;
20
21 delete[]p;
22
23 getchar();
24 return 0;
25 }
如果没有
p = (char *)realloc(p, pSize * 2);这句代码,程序将在Call _snprintf_s function时崩溃,因为p指向的内存放不下那么多的数据。这句代码的意思是在原有的内存上扩展内存。如果原有的内存上没有连续的pSize *2那么大的空闲内存,则重新分配内存,并把原内存上的数据copy到新内存有了足够大的内存空间,那么Call _snprintf_s function时就不会发生溢出的情况了。删除内存
1 int main02()
2 {
3 const size_t pSize = 100;
4 char *p = new char[pSize]{0};
5 strcpy_s(p, pSize, "I LOVE YOU, Jia Yin!");
6
7 // p = (char *)realloc(p, strlen(p) + 1);
9 if (!p)
10 cerr << "Call realloc function error!" << endl;
11
12 _snprintf_s(p, pSize, pSize, "%s..........", p);
13
14 cout << p << endl;
15 delete[] p;
16
17
18 getchar();
19 return 0;
20 }
p = (char *)realloc(p, strlen(p) + 1); 如果加了这一行代码,那么Call _snprintf_s function时就会崩溃。因为已经将多余的内存空间delete掉了,只留下strlen(p) + 1那么大的内存,装不下更多的数据。 这句代码的意思是,在原有内存的基础上把多余的内存delete掉,只留下strlen(p) + 1 这么多的内存
典型错误
1 int main()
2 {
3 char array[10]{0};
4 strcpy_s(array, 10, "Hello"); 7 // char *parray = (char *)realloc(array, 50);17 getchar();
18 return 0;
19 }
array在栈区,而realloc是在堆区分配内存。栈跟堆,永远也打不到一块去
来源:https://www.cnblogs.com/LandyTan/p/6408696.html