user-0 提问: 就很想知道realloc函数会用在什么地方？能否举个实际一点的例子。

回复:
user: user-1
content: realloc不是在内存不足时使用，而是在需要改变之前分配的内存时使用。而且没说一定要变大，也可以变小。换句话说，就是你要调整之前申请的内存大小时使用。

user: user-1
content: 引用 7 楼 狼二羊的回复:[quote=引用 2 楼 paschen 的回复:] 1、比如你第一次分配了N大小的内存，第一次用完后，第二次需要M大小内存，就可以用realloc重新分配  2、没有要求realloc的内存要比malloc时的大，realloc根据不同情况作不同处理  3、如果申请的内存后面还有足够空间，它会进行标记，并仍然返回你原指针，否则会重新寻找足够大小的空间，并复制后释放原指针的空间 有什么具体例子代码看么（看我真挚的小眼神）[/quote] http://en.cppreference.com/w/c/memory/realloc  链接里有用法说明与示例

user: user-2
content: 引用 9 楼 qq_30519247 的回复:[quote=引用 8 楼 cfjtaishan 的回复:] realloc不知道分配的内存不足，这个发现内存不足需要我们来发现和重新分配。realloc函数做不到自动发现内存不足。 程序员需要自己根据需要来定时否需要realloc增加/减少内存空间。 当程序员发现内存不够的时候还要打开源代码改？[/quote] 写代码时就要有逻辑处理可能内存不足的情况，通过realloc扩大或减少内存。 等程序运行在改肯定不行。但要注意的一点，realloc不会告诉并处理内存不足或者内存过多的情况。

user: user-0
content: 引用 8 楼 cfjtaishan 的回复:realloc不知道分配的内存不足，这个发现内存不足需要我们来发现和重新分配。realloc函数做不到自动发现内存不足。 程序员需要自己根据需要来定时否需要realloc增加/减少内存空间。 当程序员发现内存不够的时候还要打开源代码改？

user: user-0
content: 引用 2 楼 paschen 的回复:1、比如你第一次分配了N大小的内存，第一次用完后，第二次需要M大小内存，就可以用realloc重新分配  2、没有要求realloc的内存要比malloc时的大，realloc根据不同情况作不同处理  3、如果申请的内存后面还有足够空间，它会进行标记，并仍然返回你原指针，否则会重新寻找足够大小的空间，并复制后释放原指针的空间 有什么具体例子代码看么（看我真挚的小眼神）

user: user-0
content: 引用 1 楼 user-6 的回复:记得  《数据结构》严蔚敏  那本书开始部分讲栈的时候 先malloc了100个int的内存，当栈Push的时候检测是否要用完，如果用完，就在原来的基础上 多加10个int的栈空间 这时候就用了 realloc    你可以看看   《数据结构》严蔚敏P47页 的Push函数里面 用了 realloc 虽然没这本书，但我看你写的我自己理解了一下。是不是这样的，假如有100的内存，当用完了就加10个内存变成110，当检测110用完了再加10？以此类推

user: user-2
content: realloc不知道分配的内存不足，这个发现内存不足需要我们来发现和重新分配。realloc函数做不到自动发现内存不足。 程序员需要自己根据需要来定时否需要realloc增加/减少内存空间。

user: user-3
content: 仅供参考：//文件1中的内容排序并去重,结果保存到文件2中 #include <stdio.h> #include <stdlib.h> #include <string.h> #define MAXCHARS 128      //能处理的最大行宽,包括行尾的\n和字符串尾的\0 int MAXLINES=10000,MAXLINES2; char *buf,*buf2; int c,n,hh,i,L; FILE *f; char ln[MAXCHARS]; int ignore_case=0; int icompare(const void *arg1,const void *arg2) {    return stricmp((char *)arg1,(char *)arg2); } int compare(const void *arg1,const void *arg2) {    return strcmp((char *)arg1,(char *)arg2); } int main(int argc,char **argv) {     if (argc<3) {         printf("Unique line. Designed by zhao4zhong1@163.com. 2012-08-20\n");         printf("Usage: %s src.txt uniqued.txt [-i]\n",argv[0]);         return 1;     }     if (argc>3) ignore_case=1;//若存在命令行参数3，忽略大小写     f=fopen(argv[1],"r");     if (NULL==f) {         printf("Can not find file %s!\n",argv[1]);         return 1;     }     buf=(char *)malloc(MAXLINES*MAXCHARS);     if (NULL==buf) {         fclose(f);         printf("Can not malloc(%d LINES*%d CHARS)!\n",MAXLINES,MAXCHARS);         return 2;     }     n=0;     hh=0;     i=0;     while (1) {         if (NULL==fgets(ln,MAXCHARS,f)) break;//         hh++;         L=strlen(ln)-1;         if ('\n'!=ln[L]) {//超长行忽略后面内容             printf("%s Line %d too long(>%d),spilth ignored.\n",argv[1],hh,MAXCHARS);             while (1) {                 c=fgetc(f);                 if ('\n'==c || EOF==c) break;//             }         }         while (1) {//去掉行尾的'\n'和空格             if ('\n'==ln[L] || ' '==ln[L]) {                 ln[L]=0;                 L--;                 if (L<0) break;//             } else break;//         }         if (L>=0) {             strcpy(buf+i,ln);i+=MAXCHARS;             n++;             if (n>=MAXLINES) {                 MAXLINES2=MAXLINES*2;                 if (MAXLINES2==1280000) MAXLINES2=2500000;                 buf2=(char *)realloc(buf,MAXLINES2*MAXCHARS);                 if (NULL==buf2) {                     printf("Can not malloc(%d LINES*%d CHARS)!\n",MAXLINES2,MAXCHARS);                     printf("WARNING: Lines >%d ignored.\n",MAXLINES);                     break;//                 }                 buf=buf2;                 MAXLINES=MAXLINES2;             }         }     }     fclose(f);     if (n>1) {         if (ignore_case) qsort(buf,n,MAXCHARS,icompare);         else qsort(buf,n,MAXCHARS,compare);     }     f=fopen(argv[2],"w");     if (NULL==f) {         free(buf);         printf("Can not create file %s!\n",argv[2]);         return 2;     }     fprintf(f,"%s\n",buf);     if (n>1) {         if (ignore_case) {             hh=0;             L=MAXCHARS;             for (i=1;i<n;i++) {                 if (stricmp((const char *)buf+hh,(const char *)buf+L)) {                     fprintf(f,"%s\n",buf+L);                 }                 hh=L;                 L+=MAXCHARS;             }         } else {             hh=0;             L=MAXCHARS;             for (i=1;i<n;i++) {                 if ( strcmp((const char *)buf+hh,(const char *)buf+L)) {                     fprintf(f,"%s\n",buf+L);                 }                 hh=L;                 L+=MAXCHARS;             }         }     }     fclose(f);     free(buf);     return 0; }

user: user-4
content: 比如用在动态数组中灵活调整数组大小。

user: user-5
content: 比如数组内存增加的时候

user: user-1
content: 1、比如你第一次分配了N大小的内存，第一次用完后，第二次需要M大小内存，就可以用realloc重新分配  2、没有要求realloc的内存要比malloc时的大，realloc根据不同情况作不同处理  3、如果申请的内存后面还有足够空间，它会进行标记，并仍然返回你原指针，否则会重新寻找足够大小的空间，并复制后释放原指针的空间

user: user-6
content: 记得  《数据结构》严蔚敏  那本书开始部分讲栈的时候 先malloc了100个int的内存，当栈Push的时候检测是否要用完，如果用完，就在原来的基础上 多加10个int的栈空间 这时候就用了 realloc    你可以看看   《数据结构》严蔚敏P47页 的Push函数里面 用了 realloc