C语言realloc函数:如何在C中的函数中使用realloc

基于我在这里学到的东西:Manipulating dynamic array through functions in C

void test(int data[])
{
    data[0] = 1;    
}    
int main(void)
{    
    int *data = malloc(4 * sizeof *data);
    test(data);
    return 0;
}

但是,我也试图在函数中使用realloc

void increase(int data[])
{
    data = realloc(data, 5 * sizeof *data);    
}

这符合,但程序运行时崩溃。

Question

我应该如何在函数中使用 realloc?

我了解我应该将realloc的结果分配给一个变量,并首先检查它是否为NULL,这只是一个简化的示例。

37

您想要修改int*(您的数组)的值,因此需要将指针传递到increase函数中:

void increase(int** data)
{
    *data = realloc(*data, 5 * sizeof int);
}

然后调用代码看起来像:

int *data = malloc(4 * sizeof *data);
/* do stuff with data */
increase(&data);
/* more stuff */
free(data);
8

记住指针和数组之间的区别。
数组是堆栈中的一块内存,仅此而已。如果你有一个数组:

int arr[100];

那么 arr 是内存的地址,也是 & amp;arr 是内存的地址,并且那个内存地址是常量,不存储在任何位置。所以你不能说 arr = NULL,因为 arr 不是指向某物的变量。它只是一个符号地址:数组开始的地址。相反,指针有它自己的内存,可以指向内存地址。

将 int [] 更改为 int * 就足够了。
此外,变量是通过复制传递的,因此您需要将 int * * 传递给函数。

关于如何使用 realloc,所有的教学示例包括:

使用 realloc;

检查它是否为 NULL。在这种情况下使用 perror 并退出程序;

如果它不是 NULL 使用分配的内存;

当你不再需要它时,释放记忆。

所以这将是一个很好的例子:

int* chuck= (int*) realloc (NULL, 10*sizeof(int)); // Acts like malloc,
              // casting is optional but I'd suggest it for readability
assert(chuck);
for(unsigned int i=0; i<10; i++)
{
    chunk[i]=i*10;
    printf("%d",chunk[i]);
}
free(chunk);
6

这两个代码都是非常有问题的,如果你使用相同的指针从 realloc 发送和接收,如果它失败了,你会失去你的指针,以便以后释放它。

你应该做这样的事情:

{...

more = realloc(area , size);
if( more == NULL )
    free(area);
else
    area=more;

……

}

本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处

(283)
Cosx/cos2x:Python:如何绘制y=cosh(x)*cos(5x)
上一篇
Cosplay主题:如何通过主题森林为报纸主题创建子主题
下一篇

相关推荐

  • docker游戏服务器:如何使用Docker搭建高性能的游戏服务器

    Docker游戏服务器是一种将游戏服务器部署到容器中的方式,它可以帮助游戏开发者快速、轻松地部署游戏服务器,并且可以更轻松地扩展游戏服务器的容量。…

    2023-04-27 09:55:33
    0 70 41
  • javascript数组:排序和搜索

    javascript数组是一种特殊的对象,它可以存储多个值,这些值可以是任何类型的数据。JavaScript数组的元素可以通过索引来访问,数组的索引从0开始,每个元素都有一个索引值。…

    2023-08-28 11:30:24
    0 38 57
  • coremail论客邮箱Coremail论客邮箱

    Coremail论客邮箱是一款专业的企业邮箱服务,可以满足企业对安全、可靠性和高效性的要求。它拥有强大的安全性能,可以提供多种安全保护,包括防止邮件被窃取、拦截恶意邮件、防止跨站脚本攻击等。此外,它还支持多种企业级功能,如组织架构管理、收发邮件管理、文件共享管理、联系人管理等,可以帮助企业提高工作效率,提升企业形象。…

    2023-02-25 04:36:55
    0 21 53
  • canvas下载安装:Unleash the Power of Canvas to Create Amazing Visuals

    Canvas是一种HTML5技术,可以在网页上创建和绘制2D图形。它是一个JavaScript API,可以使用JavaScript代码来绘制图形,并且可以添加各种效果,如阴影,渐变,动画等。…

    2023-03-08 00:48:14
    0 41 87
  • class定位:The Benefits of Using Class Selectors for Element Locati

    示例示例class定位是一种CSS布局技术,用于指定HTML元素的位置,可以使元素放置在页面的任何位置。代码示例:…

    2023-03-06 07:16:44
    0 98 91
  • security code怎么填保护您的数据和隐私

    示例示例code是一种防止自动提交表单的安全措施,通常会在表单中显示一个图片,用户需要输入图片中显示的字符。以下是一个简单的 code代码示例:…

    2023-03-20 09:31:54
    0 72 69
  • for循环中的continue:使用continue跳过循环中的某些步骤

    示例示例是 for 循环的一个控制语句,它用于跳过当前循环的剩余代码,然后继续执行下一次循环。下面是一个使用 语句的示例:…

    2023-07-11 15:34:46
    0 87 21
  • javascript 常量:如何利用JavaScript常量提高编程效率

    示例示例常量是一个不可变的值,它的值在声明之后不能更改。它们可以用来存储程序中使用的固定值,并且可以被多次使用。代码示例:…

    2023-06-16 03:01:55
    0 90 46

发表评论

登录 后才能评论

评论列表(41条)