关于使用realloc函数的问题

小弟今天写了一个函数,目的很简单:
把输入的指针里面的内容重新排序后去掉后面perc%个数。
可是在使用realloc的时候一直提示我“windows在.exe中触发了一个断点“,不知道是不是访问越界了,小弟愚笨,调试了两个小时都没有调好,特向各位请教,不知道我这么写有没有什么问题。

 void maxdt(double *input, int size, double perc)
{
    sort(input, size);
    input=(double*)realloc(input,sizeof(double)*(int)(size-size*perc/100));
}

2个回答

input指向新的地址,这个没用,实参的指针不会被修改的。
需要用
void maxdt(double **input, int size, double perc)
{
sort(*input, size);
input=(double)realloc(input,sizeof(double)*(int)(size+size*perc/100));
}
调用者加上取地址符号。

u010718778
-不过而已 非常感谢您的回答,不过我的问题貌似不是这样的,我想请问一下,realloc函数一定要在前面搭配malloc函数使用吗?我是用别的方法给指针分配的地址能不能用realloc改变其大小
3 年多之前 回复

malloc用于申请一段新的地址,参数size为需要内存空间的长度,如:
char* p;
p=(char*)malloc(20);

calloc与malloc相似,参数sizeOfElement为申请地址的单位元素长度,numElements为元素个数,如:
char* p;
p=(char*)calloc(20,sizeof(char));
这个例子与上一个效果相同

realloc是给一个已经分配了地址的指针重新分配空间,参数ptr为原有的空间地址,newsize是重新申请的地址长度
如:
char* p;
p=(char*)malloc(sizeof(char)*20);
p=(char*)realloc(p,sizeof(char)*40);

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
关于realloc函数的问题
好滴,我最近学习一下C语言,我知道这个函数的用法,感觉我英语还行,[url=http://www.cplusplus.com/reference/cstdlib/realloc/]这一页[/url]我都熟读了,也都看懂了,然后写了一个测试代码,但是在VS 2010下面调试没能达到我想要的效果:rn[code=c]#include rn#include rnrnint main()rnrn int t=8;rn int* pc=(int*)realloc(NULL,t*sizeof(int));rn int *pn;rn if(pc==NULL)rn return -1;rn printf("Allocated Address: 0X%08X\n",pc);rn //set valuesrn for(int i=0;i
关于realloc()使用的问题
```rn#includern#includern#includernrntypedef struct HString rn char *ch=NULL; //需要初始化rn int length=0;rnHString;rnrnvoid hsAssign(HString &T,char s[]) rn if (T.ch)rn free(T.ch);rn T.ch = (char*)malloc(sizeof(char));rn if (!T.ch) rn printf("Fail to create the string.");rn return;rn rn T.length = strlen(s);rn for (int i = 0; i < strlen(s); i++)rn T.ch[i] = s[i];rnrnrnint hsCompare(HString T, HString S) rn //若S>T,则返回值>0rn for (int i = 0; i < T.length&&i < S.length; i++)rn if (T.ch[i] != S.ch[i]) rn return S.ch[i] - T.ch[i]; //返回的是ASCII码的差rn return S.length - T.length;rnrnrnint hsClear(HString &T) rn free(T.ch);rn T.ch = NULL;rn T.length = 0;rn return 1;//确认清空串操作是否成功rnrnrnvoid hsConcat(HString &con, HString T, HString S) rn if (con.ch)rn free(con.ch);rn con.ch = (char*)malloc(sizeof(char));//确保con被分配了新的存储空间rn for (int i = 0; i < T.length; i++)rn con.ch[i] = T.ch[i];rn for (int i = T.length; i < T.length + S.length; i++)rn con.ch[i] = S.ch[i - T.length];rn con.length = T.length + S.length;rnrnrnvoid hsSub(HString &sub, HString T, int pos, int len)rn if (pos -1> T.length || pos <= 0 || pos + len -1> T.length || len < 0) rn printf("Wrong input.");rn return;rn rn int count = 0;rn if (sub.ch)rn free(sub.ch);rn sub.ch = (char*)malloc(sizeof(char));rn for (int i = pos - 1; i <=pos + len - 2; i++)rn sub.ch[count++] = T.ch[i];rn sub.length = len;rnrnrnvoid hsInsert(HString &S, int pos, HString T) rn int count = 0;rn if (pos <= 0 || pos - 1 > S.length) rn printf("Wrong input");rn return;rn rn for (int i = S.length - 1; i >= pos - 1; i--)rn S.ch[i + T.length] = S.ch[i];rn for (int i = pos - 1; i <= pos + T.length - 2; i++)rn S.ch[i] = T.ch[count++];rn S.length += T.length;rnrnrnvoid hsPrint(HString T) rn for(int i=0;i
求助关于realloc函数的问题
是这样的[img=https://img-bbs.csdn.net/upload/201804/04/1522827480_166740.png][/img]在一本书上看到这个程序,自己敲了一下,发现出来的结果和书上给的不一样,是什么原因呢?rn这个是我敲的程序rn[img=https://img-bbs.csdn.net/upload/201804/04/1522827095_776602.png][/img]rnrn这个是运行结果,书上有89AB,但是我这个运行的后面是空格。。。。。。[img=https://img-bbs.csdn.net/upload/201804/04/1522827148_865371.png][/img]
新手,关于realloc函数的问题
本人初学c,看到realloc()函数时,书上的说明是第二个参数的值不应超过以前分配的字节数。但前几天有人和我说第二个参数的值一定要超过以前分配的字节数。rn 新手不太明白,还请各位高手指点。
realloc函数使用注意事项
realloc函数使用注意事项 realloc是c语言中常用的内存重分配函数,函数声明如下: /** * 重新分配内存大小 * @param mem_address: 需要改变内存大小的指针 * @param newsize: 内存新的大小 * @return void* */ void *realloc(void *mem_address, unsigned int newsize); rea...
realloc函数的使用
realloc函数的使用在数据结构中十分重要,本文给出了使用的例子和使用的具体说明
关于realloc函数
这个函数就是查找替换功能,比如输入“Hello world aaa”,会提示输入要替换的字符串,比如”world“,又会提示你输入替换后的字符串,比如”primer“,替换后应为“hello primer aaa”,但在windows下出现乱码,rn主要是realloc导致的,但是想不通啊;rn请高手指点rn[code=C/C++]#include rn#include rn#include rn#include rnrn#define DEBUGrn#ifdef DEBUGrn#define gdbprintf printfrn#elsern#define gdbprintf /\rn\gdbprintfrn#endifrnrnrnint find_string(char *S,char *str)rn int i=strlen(str);rn int n;rn char *p=S;rn if(strlen(S)(signed)strlen(*S)) return NULL;rn gdbprintf("%s\n",*S);rn rn (*S)= (char *)realloc((*S),temp+strlen(str)+1);rn gdbprintf("%s\n",*S);rn if(!(*S)) exit(-1);rn p=*S+i-1;rn q=*S+temp; rn while(q>=p)rn *(q+strlen(str)) = *q;rn q--;rn rn q = str;rn while(*q != '\0')rn *p++ = *q++;rn rn /* *(*S+strlen(*S))='\0';*/rn return *S;rnrnrnint main(void)rnrn char *str1,str2[100],str3[100]; rn char *p;rn int i;rn str1 = (char*)malloc(sizeof(100));rn printf("please enter your chars\n");rn gets(str1);rn printf("enter the chars you want to repleace\n");rn gets(str2);rn printf("enter the chars you want to repleace to\n");rn gets(str3);rn p = str1;rn// while(*p != '\0')rn p = str1;rn i = find_string(p,str2);rn gdbprintf("%s\n",p);rn del_string(p,strlen(str2),i);rn gdbprintf("%s\n",p);rn insert_string(&p,str3,i);rn gdbprintf("%s\n",p);rn p = p+i+strlen(str3);rn// rn puts(str1);rn return 1;rn[/code]
关于realloc函数的调试
今天在写一个内存分配小程序遇到点问题,大概整理下。rnrn首先提一下realloc函数原型:rnrnreallocrn原型:extern void *realloc(void *mem_address, unsigned int newsize);rn用法:#include 有些编译器需要#include rn功能:改变mem_address所指内存区域的大小为newsize长度。rn说明:如果重新分配成功则返回指向被分配内存的指针,否则返回空指针NULL。rn当内存不再使用时,应使用free()函数将内存块释放。rn注意:这里原始内存中的数据还是保持不变的。 rnrn第一次的代码如下:rn[code=C/C++]rn #include rn #include rn int main(void) rn rn int i; rn char c, *p = NULL; rn p = (char *)malloc(10); rn for (i = 0;;i++) rn rn c = getchar(); rn if (i > 9) rn rn p = (char *)realloc(p, 1); rn rn if (c == '\n') rn rn p[i] = '\0'; rn break; rn rn else rn rn p[i] = c; rn rn rn printf("%s\n", p); rn free(p); rn return 0; rn rn[/code]rnrn测试数据如下:rnrn[root@localhost linuxc]# ./mymallocrn1234567890abcrn1234567890abcrnrn[root@localhost linuxc]# ./mymallocrn1234567890abcdrn*** glibc detected *** realloc(): invalid next size: 0x0879d008 ***rnAbortedrnrn这里有个小问题,当时误以为relloc的第二个参数是增加的内存数,但是通过gdb调试后rnrn发现当输入的参数为13位长时能够正常显示,从14位开始就报错了。rnrngdb详细信息如下:rnrn(gdb) b 29rnBreakpoint 2 at 0x804847e: file mymalloc.c, line 29.rn(gdb) runrnThe program being debugged has been started already.rnStart it from the beginning? (y or n) yrnStarting program: /study/linuxsrc/src/linuxc/mymallocrn1234567890abcdrnrnBreakpoint 2, main () at mymalloc.c:29rn29 if (i > 9)rn(gdb) display irn1: i = 0rn(gdb) display crn2: c = 49 '1'rn(gdb) display prn3: p = 0x9701008 ""rn(gdb) display p[i]rn4: p[i] = 0 '\0'rn(gdb) crnContinuing.rnrnBreakpoint 2, main () at mymalloc.c:29rn29 if (i > 9)rn4: p[i] = 0 '\0'rn3: p = 0x9701008 "1"rn2: c = 50 '2'rn1: i = 1rnrn.rnrn.rnrn.rnrnrnBreakpoint 2, main () at mymalloc.c:29rn29 if (i > 9)rn4: p[i] = 0 '\0'rn3: p = 0x9701008 "1234567890a"rn2: c = 98 'b'rn1: i = 11rnrn(gdb)rnContinuing.rnrnBreakpoint 2, main () at mymalloc.c:29rn29 if (i > 9)rn4: p[i] = -15 'ñ'rn3: p = 0x9701008 "1234567890abñ\017\002"rn2: c = 99 'c'rn1: i = 12rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at mymalloc.c:29rn29 if (i > 9)rn4: p[i] = 15 '\017'rn3: p = 0x9701008 "1234567890abc\017\002"rn2: c = 100 'd'rn1: i = 13rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at mymalloc.c:29rn29 if (i > 9)rn4: p[i] = 2 '\002'rn3: p = 0x9701008 "1234567890abcd\002"rn2: c = 10 '\n'rn1: i = 14rn(gdb)rnContinuing.rn*** glibc detected *** realloc(): invalid next size: 0x09701008 ***rnrnProgram received signal SIGABRT, Aborted.rn0x003c07a2 in _dl_sysinfo_int80 () from /lib/ld-linux.so.2rnrn---------------------------------------------------------------------------rnrn以上为详细调试信息。rnrn后来查阅了下realloc相关函数用法,做了一下改动:rnrn[code=C/C++]rn #include rn #include rn int main(void) rn rn int i; rn char c, *p = NULL; rn p = (char *)malloc(10); rn for (i = 0;;i++) rn rn c = getchar(); rn if (i > 9) rn rn p = (char *)realloc(p, strlen(p) + 1); rn rn if (c == '\n') rn rn p[i] = '\0'; rn break; rn rn else rn rn p[i] = c; rn rn rn printf("%s\n", p); rn free(p); rn return 0; rn rn[/code]rnrn(gdb) b 29rnBreakpoint 2 at 0x80484b6: file ./mymalloc.c, line 29.rn(gdb) crnContinuing.rn1234567890123456rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn(gdb) display irn1: i = 0rn(gdb) display crn2: c = 49 '1'rn(gdb) display prn3: p = 0x969e008 ""rn(gdb) display p[i]rn4: p[i] = 0 '\0'rn(gdb) display strlen(p)rn5: ( 0x444170 ) (p) = 0rn(gdb) crnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 1rn4: p[i] = 0 '\0'rn3: p = 0x969e008 "1"rn2: c = 50 '2'rn1: i = 1rnrn.rnrn.rnrn.rnrn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 10rn4: p[i] = 0 '\0'rn3: p = 0x969e008 "1234567890"rn2: c = 49 '1'rn1: i = 10rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 11rn4: p[i] = 0 '\0'rn3: p = 0x969e008 "12345678901"rn2: c = 50 '2'rn1: i = 11rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 15rn4: p[i] = -15 'ñ'rn3: p = 0x969e008 "123456789012ñ\017\002"rn2: c = 51 '3'rn1: i = 12rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 15rn4: p[i] = 15 '\017'rn3: p = 0x969e008 "1234567890123\017\002"rn2: c = 52 '4'rn1: i = 13rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 15rn4: p[i] = 2 '\002'rn3: p = 0x969e008 "12345678901234\002"rn2: c = 53 '5'rn1: i = 14rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 15rn4: p[i] = 0 '\0'rn3: p = 0x969e008 "123456789012345"rn2: c = 54 '6'rn1: i = 15rn(gdb)rnContinuing.rnrnBreakpoint 2, main () at ./mymalloc.c:29rn29 if (i > 9)rn5: ( 0x444170 ) (p) = 16rn4: p[i] = 0 '\0'rn3: p = 0x969e008 "1234567890123456"rn2: c = 10 '\n'rn1: i = 16rn(gdb)rnContinuing.rn1234567890123456rnrnProgram exited normally.rnrn程序运行正常,但是在gdb调试中打印p的字符串和strlen(p)时,strlen(p)突然从rnrn11跳到15,很是不解。rnrnrnrn烦请高手讲解下strlen(p)突然从11跳到15是为什么?还有第一次的代码p = (char *)realloc(p, 1); rn在参数为1234567890abc为什么结果正常,增加一位到1234567890abce就报错?
关于使用realloc函数分配内存引来的错误
我在一个算法中使用malloc and realloc来根据需要不断扩充内存。rn可是现在有一个很奇怪的问题rn就是程序总报错,我跟踪调试发现报错的地方并不确定。有的时候报错在前面,有的时候报错在后面。rn我设置断点发现一个报错:Unhandled exception in C45ALGORITHM.exe(MSVCRTD.DLL) OxC0000005 Access rnrnViolation.rnrn请问哪位遇到过这样的问题
realloc函数的问题
int *pn=(int *)malloc(5*sizeof(int));rnpn=(int *)realloc(pn,10*sizeof(int));rn这样pn表示的地址值会改变吗?rn问题的实质是realloc函数是新开辟了一块空间还是在原有空间上增加元素。rn另外用cout怎么输出pn的值rn测试cout<
关于realloc的使用与分析
//函数原型如下 void* realloc(void* ptr, unsigned newsize); realloc可以对给定的指针所指的空间进行扩大或者缩小;realloc是从堆上分配内存的.当扩大一块内存空间时,realloc()试图直接从堆上现存的数据后面的那些字节中获得附加的字节,如果能够满足,执行成功;如果数据后面的字节不够,那么就使用堆上第一个有足够大小的自由块,现存的数据被拷
realloc函数
[code=C/C++]rnvoid strcat1(char *s,const char *t)rn rn while(*s)rn s++;rn while(*t)rn *s++=*t++;rnrnvoid main()rnrn char *s="123";rn const char *t="456";rn realloc(s,strlen(s)+strlen(t)+1);rn strcat1(s,t);rn rn printf("%s",s);rn printf("\n");rnrn[/code]rn请问各位高手,这个程序内存为什么会出问题?
关于realloc的正确使用
排查了好多遍,知道问题应该是realloc用的不对,但是不知道哪里用错了,求好心大神指点一二~rn代码如下:rn#define STR_COUNT 5rn#define BUF_LEN 50rn#define CAR_INCR 3rnvoid sort(char **pStrings,size_t count);rnvoid swap(char **str1,char **str2);rnvoid list_strings(char **pStrings,size_t count);rnrnint main(void)rnrn size_t capacity=STR_COUNT;rn size_t str_count=0;rn char buf[BUF_LEN];rn char **pStrings=(char**)calloc(capacity,sizeof(char*));rn char **psTemp=NULL;rnrn size_t str_len=0;rnrn //Read all stringsrn printf("Enter some strings and end by entering an empty line:\n");rn while(true)rn rn if(!fgets(buf,sizeof(buf),stdin))rn rn printf("Error on reading strings.\n");rn free(pStrings);rn pStrings=NULL;rn return 1;rn rn if(buf[0]=='\n')rn break;rn if(capacity==str_count)rn rn capacity+=3;rn psTemp=(char**)realloc(pStrings,capacity*sizeof(char*));rn if(!psTemp)rn rn printf("Reallocation failed.\n");rn return 2;rn rn pStrings=psTemp;rn rn str_len=strnlen_s(buf,BUF_LEN)+1;rn if(!(pStrings[str_count]=(char*)malloc(sizeof(char)*str_len)))rn rn printf("Allocation for strings failed.\n");rn return 3;rn rn strcat_s(pStrings[str_count++],str_len,buf);rn printf("str_count=%d\n",str_count);rn rn for(size_t i=0;i
关于realloc函数的一个小问题
[code=C/C++]rn#include rnrnint main(void)rnrnchar *p;rnrnp=(char *)malloc(sizeof(char));rnrnint count=1;rnrnwhile((p[count-1]=getchar())!=EOF&&p[count-1]!='\n')rn p=(char *)realloc(p,++count);rn rn rn puts(p);rn return 0;rnrn[/code]rnrn这样书写是否有什么错误?rnrn这样的话,系统是否会自动在字符串后面加'\0',还是必须在后面加一句p[count-1]='\0'这句呢
请问一个关于realloc函数的问题
void main()rnrn int *p;rn p=new int[1];rn p[0]=1;rn p=(int*)realloc(p,2); rn p[1]=2;rnrnrn请问,为什么在对p重新分配空间后,原来p[0]的内容就消失了?
关于C语言realloc函数的问题
准备用一段代码测试realloc函数的功能,代码如下:rn#includern#includern#includernint main(void)rnrnchar buf[100];rnchar** ps=(char**)calloc(2,sizeof(char*));rnchar** pt=NULL;rnint i=0;rnsize_t len=0;rnrnwhile(true)rnrn fgets(buf,100,stdin);rn if(buf[0]=='\n')rn break;rn len=strlen(buf)+1;rn ps[i]=(char*)malloc(len);rn strcpy(ps[i++],buf);rnrnprintf("%s",ps[1]);rnpt=(char**)realloc(ps,3);rnps=pt;rnprintf("%s",ps[1]);rnfor(int k=0;k<3;++k)rnfree(ps[k]);rnfree(ps);rnreturn 0;rnrn程序没有报错,但运行会停止工作。调试后发现经过realloc函数后,ps[1]产生expression can not be evaluated错误,有大神知道原因吗?
realloc函数和calloc函数
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。如果将分配的内存减少,realloc仅仅是改变索引的信息。   1.如果realloc()函数的第一个参数是NULL,那么系统就会分配第二个参数指定的新内存,并返回新内存单元的首字节的指针。此时,realloc()函数类似于ma
关于malloc和realloc的问题
int *p;rnp=(int *)malloc(3*sizeof(int));rnfree(p);rn问题是在free的时候,对于指针p,free怎么知道应该释放多少位内存?rn如果是rnint *p,*q;rnp=(int *)malloc(3*sizeof(int));rnq=p;rnfree(q);rn它还能正确的释放吗?rn下面是realloc的问题:rnint *p;rnp=(int *)malloc(3*sizeof(int));rnp[0]=100;rnp=(int *)realloc(p,4*sizeof(int));rnfree(p);rn1.realloc是不是重新开辟了4个sizeof(int)的内存,把原来的3个sizeof(int)的内容复制过去?也就是说p[0]在执行了realloc后是否还是100?如果重新开辟的小于原来开辟的,是否只复制前面的一部分数据.rn2.执行了realloc后,原来的那3个sizeof(int)是不是会自动被释放掉?rn望高手详细回答.不胜感激rnrn
关于realloc的问题
每次使用realloc多申请一个sizeof(int)的空间。rn=========================================rnvoidrnmain()rnrn int i;rn int dataList[5] = 1, 2, 3, 4, 0;rn int* numList = (int*)malloc(sizeof(int));rn int* tempNumList = numList;rnrn for(i = 0; i < 5; i++)rn *tempNumList++ = dataList[i];rn numList = (int*)realloc(numList, sizeof(int)); //xxx rn rnrn printf("\n");rn while(*numList != 0)rn printf("%d ", *numList++); rn rnrn=============================================rn结果很奇怪:1, -33686019, 3, 4。 rn除了第二个数字以外其他都正常。rn如果考虑realloc的第二个参数是‘增加到’的大小,那么xxx处改为sizeof(int)*(i+2)运行到第二个循环以后numList就会换位置。rn请教各位,多谢!
关于realloc错误的问题
void extent_length(int base[],int check[],list vode[])rnrn rn max_length_now+=each_add; // #define each_add 10rn rn if( (base=(int *)realloc(base,max_length_now*sizeof(int))) ==NULL) //errorrn rn cout<<"内存分配错误"<
关于realloc的问题!
在C++中有没有和C中realloc功能相同的函数,虽然realloc在C++中也可以用,但是有没有更好的呢?rn最好举例,谢谢!!
关于realloc问题
这程序的意思是现在一个顺序表内输出内容,然后要在这个顺序表内再插入一个是数字,这是要用realloc来增加一个空间rn但是,输出的结果却不正确,除了顺序表的第一个位置,和插入位置的内容是正确的,其余的都是一个负数。这是什么问题造成的?rnrn#include rn#include rnrn#include "list2.h"rnrnmain()rnrnrn struct sqlist p1;rnrn int *newbase,*newbase1 ,*q,*p;rnrn int i;rnrn int e=9;rnrn newbase=(int *)malloc (sizeof (4));rnrn if (!newbase) return 0;rnrn p1.elem=newbase;rnrn printf ("Input the number in the sqlist p1 --");rnrn while (i<4)rn rn scanf ("%d ",&p1.elem[i] );rn i++;rn rnrn printf ("\n");rn rn for (i=0;i<4;i++)rn printf ("p1->%d ",p1.elem[i]);rnrn printf ("\n\n");rnrn//reallocrnrn newbase1=(int *)realloc(p1.elem,(4 +1)*sizeof(int));rn rnrn if (!newbase1) return 0;rnrn p1.elem=newbase1;rnrn q=&p1.elem[2];rn rn for(p=&p1.elem[4];p>=q;p--) rn rnrn *(p+1)=*p;rnrn rn rn *q=e;rnrn for (i=0;i<5;i++)rnrn printf ("p1->%d ",p1.elem[i]);rnrn
关于realloc的用法问题
代码如下:rn char *q = (char*)malloc(10);rn char *p = "123456";rn p = (char*)realloc(p,20);rn if(p==NULL)rn cout<<"alloc bad"<
请教一个realloc函数的问题
这个函数是用来扩大或缩小所分配的内存空间,我是这样调用的rnstr = (char*)realloc(str, 10 * n++ * sizeof(char));rnrn可是当调用的函数次数增多,str的内容居然有“屯”了,次数再多一点编译器居然会报错!用的vc6.0, 好像这个函数有可能会开辟一块新内存来把数据拷贝进去,可是就算是开辟新地址也应该是一块连续的空间吧,不应该会有这种问题啊。
关于realloc
在数据结构上看到如下;nebase=(elemtype *)realloc(l.elem,newsize*sizeof(elemtype)); l.elem=newbase;rnrealloc分配地址后新基址是原来基址吗?看了几个帖子,感觉没变,但是为什么又要用到l.elem=newbase?
realloc 和new 函数
请问 在C++ 中有没有C 中和realloc 一样功能得函数rnrn】函数原型是什么 谢谢
malloc和realloc函数的格式
malloc和realloc的正确格式究竟是怎么样的?rn我看MSDN上是buffer = realloc( buffer, size + (1000 * sizeof( long )) rnstring = malloc( _MAX_PATH );rn而书上是rnp=(ElemType *)malloc(SIZE *sizeof(ElemType))rn究竟是哪个啊?
关于free()函数 realloc()函数的问题 请高手指教
例如:rn char str[]="abcdef";rn char *chars=str;rn free(chars);rn再如:rn char *p;rn p=(char*)malloc(50*sizeof(char));rn .......rn free(p);rnrn 这里的free()函数是释放了整个数组占用的空间还是只释放了第一个元素占用的空间?怎样把指针所指向的一整块空间通过free()函数释放?还有如果p指向的是一个链表,free(p)是只释放第一个结点的空间还是整个链表占用的空间都可以释放?能够说明一下free()函数原理的更好rnrn还有realloc()函数的问题rn 例如:rn char *p,*q;rn p=(char*)malloc(50*sizeof(char));rn ......rn q=(char*)realloc(p,100*sizeof(char));rn realloc()函数是怎样实现的?rn 是rn 在原有空间(即p指向的空间)的基础上扩充空间后将原空间的元素复制到新开辟的空间(q指向的空间)里,结束后q指向的地址实际上还是p指向的地址。rn 还是rn 另外开辟一块儿指定大小的空间,将原有空间中的元素复制到新空间里,然后将原来的空间覆盖。rn 或者是通过其他方式实现? p和q指向的内存首地址是不是一个地方啊?请高手指教,越详细越好。
C++ 函数 realloc 的用法
void * realloc(void * mem_address, unsigned int newsize) 功能 先判断当前指针是否有足够的连续空间: 如果有,扩大mem_address指向的地址,返回mem_address 如果没有,先按newsize指定的大小分配空间,将原数据从头到尾拷贝到新分配的内存区域,而后释放原来的m...
realloc函数,内存再分配
realloc是C库提供的函数,用于动态分配新的内存地址,其原型是: void* realloc (void* ptr, size_t size); ptr:由malloc,calloc或realloc分配的地址 size:需要申请内存大小,单位为byte 当ptr==NULL时,realloc作用和malloc一样 当newSize》size时,realloc可能在原有内存的地址处扩展...
malloc 、calloc 、realloc函数
在企业级项目开发中一个非常重要的设计就是如何有效地管理内存资源。在C语言中,关于内存管理的知识点比较多,如函数变量、作用域、指针、堆 、栈、 常量区、全局静态区、要想真正掌握和理解C语言,就必须先精通C语言内存管理机制。
c语言中realloc 函数的使用
#include&amp;lt;stdio.h&amp;gt; #include&amp;lt;stdlib.h&amp;gt; int main() { int n = 0; int i = 0; int index = 0; int insert_num = 0; int *pNumber = NULL; int *pNewArray = NULL; int *inse...
动态内存分配之realloc函数的使用以及安全问题
在动态内存分配的过程中,我们经常会用到malloc,calloc等函数,在这里我们不做具体的细究。在本文中我们主要提一提realloc的使用以及需要特别注意的东西。 我们知道,在使用malloc、calloc分配内存的时候,内存大小是固定的,当我们需要调整内存大小的时候,我们该怎么办呢?这个时候,realloc就能发挥它的作用了。 函数原型:void* realloc (void* ptr, ...
malloc、calloc、realloc函数的使用与区别
malloc 函数声明:void *malloc(size_t size); 参数size为申请空间的长度 函数功能:malloc()在内存的动态存储区中分配一块长度为size字节的连续区域,申请成功则返回该区域的首地址。         注意:1.空间首地址(默认void*)是否需要进行类型转换。                     2.调用后需要判断是否申请成功。若返回值为NULL则...
C语言:使用realloc()函数重新分配内存
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。如果将分配的内存减少,realloc仅仅是改变索引的信息。如果是将分配的内存扩大,则有以下情况: 1. 如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。 2. 如果当前内存段后面的空闲字节不够,那么就使用堆中
关于C语言realloc的问题
#define STACKSIZE sizeof(int)rnint main()rnrn int a,b,num=0;rn int *result = (int*)malloc(sizeof(int));rn scanf("%d %d",&a,&b);rn while(a!=0||b!=0)rn *result = a+b;rn scanf("%d %d",&a,&b);rn num++;rn result=(int*)realloc(result,(sizeof(int)+STACKSIZE));rn result++;rn rn while(num!=0)rn rn printf("%d\n",*(result-num));rn num--;rn rn我想完成的功能是从控制台输入两个数的相加,要求是输入到0 0的时候才会显示出之前输入的所有组数的和。如下:rninput:rn9 2rn2 5rn0 0rnoutput:rn11rn7rn但是在result=(int*)realloc(result,(sizeof(int)+STACKSIZE))这个地方总是错误,我是想输入一组值分配一个空间的。求大神解答。
问个关于realloc和free的问题!!
realloc是动态重新开辟空间,假设写为ch=(int *)realloc(ch,(10+100)*sizeof(int));rn那么此时ch的返回指针是和ch一样吗,还是说另外开辟一段内存,将新指针赋给ch;rnfree的问题就是,free可以用在非动态开辟的指针中吗,比如char *a;free(a);这样子合法吗??
realloc的问题?
pcurrent_node->pitem = (struct trie_item *)realloc(pcurrent_node->pitem, (pcurrent_node->size - 1) * sizeof(struct trie_item));rnpcurrent_node->size--;rnrnif (pcurrent_node->pitem == NULL)rnrn perror("错误: ");rnrnrn以上代码中,realloc函数返回NULL, pcurrent_node->pitem 指针正常,(pcurrent_node->size - 1) * sizeof(struct trie_item)也正常不为0,为什么呢?
realloc问题
realloc开辟内存单元存在问题,会将以前的数据破坏,不知道大家有无此经历?
问题之“realloc”
有:rn s->ch=(int *)realloc(s->ch,1024*sizeof(int));rn 则:rn 如果没有足够的可用内存来完成重新分配(扩大原内存或分配新内存),则有s->ch=NULL;rn 岂不是将原来的数据丢失(释放)了?如何找回原有数据?rn 另:rn 使用realloc函数时,什么时候需要检查其改变内存是否成功?缩小时需要吗?
相关热词 c# 标准差 计算 c#siki第五季 c#入门推荐书 c# 解码海康数据流 c# xml的遍历循环 c# 取 查看源码没有的 c#解决高并发 委托 c#日期转化为字符串 c# 显示问号 c# 字典对象池