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币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
malloc,realloc,calloc的用法及区别
首先,在gcc编译器下,我们先观察一下这几个函数的功能: 由此可以看出: 函数malloc() 在内存的动态存储区中分配一块长度为size字节的连续区域,参数size为需要内存空间的长度,返回该区域的首地址; 函数calloc() 参数size为申请地址的单元元素长度,nmemb为元素个数,即在内存中申请nmemb *size字节大小的连续地址空间; 函数realloc
在c++中实现realloc()函数
在c中经常用到的动态内存分配函数realloc()到c++中好像没有提供相似功能的函数,所以借助c++提供的new()函数写了一个与realloc() 有相同功能的函数模版,觉得还可以:  template T* realloc_p(T *a,int size)//动态内存追加函数 {        T   *t ;       t  = new T[ size ] ;  
realloc函数与堆、栈的几点说明
一、realloc函数的几点说明 1.如果realloc()函数的第一个参数是NULL,那么系统就会分配第二个参数指定的新内存,并返回新内存单元的首字节的指针。此时,realloc()函数类似于malloc()函数。如果第一个参数不是NULL,但不指向以前分配的内存,或者指向已经free的内存单元,那么结果就是不确定的。 2.realloc()函数保存了第一个参数对应的内存单元的内容,且保存的
转载---Linux库函数之malloc、calloc和realloc
转载:http://www.cnblogs.com/jyaray/archive/2010/06/04/1751775.html     内存区域可以分为栈、堆、静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的。 利用指针,我们可以像汇编语言一样处理内存地址,C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:mal
C语言 realloc为什么要有返回值,realloc返回值详解/(解决任意长度字符串输入问题)。
在C语言操作中会用到大量的内存操作,其中很常用的一个是realloc().     由字面意思可以知道,该函数的作用是用于重新分配内存。     使用方式如下:     NewPtr=(数据类型*)realloc(OldPtr,MemSize)     其中OldPtr指向 待重新分配内存的指针。     NewPtr指向 新分配空间的指针。     MemSize
realloc函数的用法
realloc(void *__ptr, size_t __size):更改已经配置的内存空间,即更改由malloc()函数分配的内存空间的大小。 如果将分配的内存减少,realloc仅仅是改变索引的信息。 如果是将分配的内存扩大,则有以下情况: 1)如果当前内存段后面有需要的内存空间,则直接扩展这段内存空间,realloc()将返回原指针。 2)如果当前内存段后面的空闲字节不
小心使用C语言realloc()函数
原文:http://c.biancheng.net/cpp/html/2536.html 在C语言中,良好的编程习惯要求一个函数只做一件事,如果一个函数实现了若干功能,可以说基本是一个糟糕的设计。 C语言 realloc() 函数位于 stdlib.h 头文件中,其原型为:     void *realloc(void *ptr, size_t size); realloc
C++摒弃了C中的realloc()函数
在C语言中,realloc()函数可以改变已分配内存区的大小。但是在C++中并不提供类似功能的函数。 如果你需要,你当然可以使用realloc()。但是,realloc()仅仅保证能工作于这样的数组之上:它们被malloc()(或者类似的函数)分配,包含一些没有用户定义的复制构
C/C++ 动态存储分配 malloc calloc realloc函数的用法与区别
一、前言      动态存储分配函数头文件malloc.h(ANSI标准建议使用stdlib.h,但很多编译器可能不支持),提供许多函数来实现对内存区域的堆上内存进行管理,主要有: void *malloc(unsigned int num_bytes); void *realloc(void* mem_address,unsigned int newsize); void *calloc
C语言中realloc 使用详解(转)
realloc函数用来为ptr重新分配大小为size的一块内存,看似很简单,在使用过程中却会发生各种错误。函数形式为: void * realloc ( void * ptr, size_t new_size ); 最近在网上查看了一些资料,在glibc中没有找到具体的实现(有人找到了可以发给我,ladd.cn@gmail.com),查到了一个开源项目自己写的realloc代码,http://