问题描述
- 关于使用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)); }
解决方案
input指向新的地址,这个没用,实参的指针不会被修改的。
需要用
void maxdt(double **input, int size, double perc)
{
sort(*input, size);
input=(double)realloc(input,sizeof(double)*(int)(size+size*perc/100));
}
调用者加上取地址符号。
解决方案二:
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);
时间: 2024-10-06 10:03:41