2 u010718778 u010718778 于 2016.02.29 16:42 提问

关于使用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个回答

caozhy
caozhy   Ds   Rxr 2016.02.29 16:44

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

u010718778
u010718778 非常感谢您的回答,不过我的问题貌似不是这样的,我想请问一下,realloc函数一定要在前面搭配malloc函数使用吗?我是用别的方法给指针分配的地址能不能用realloc改变其大小
接近 2 年之前 回复
oyljerry
oyljerry   Ds   Rxr 2016.02.29 19:37

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
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!