微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

realloc() 有什么问题?

如何解决realloc() 有什么问题?

我正在编写一个使用 realloc() 的代码。以下是问题的简化版本。虽然代码看起来很明显,但它似乎不起作用。

// Program for implementing variable length integer array.

#include<stdio.h>
#include<stdlib.h>

void add(int* ptr,int len,int ele){
    ptr = (int*)realloc(ptr,len);
    *(ptr+len-1) = ele;
}

void main(){
    
    int max_len = 10;
    
    int* arr = (int*)malloc(sizeof(int));
    
    for(int i=0;i<max_len;i++)
        add(arr,i+1,i+1);
    
    printf("The elements are...\n");
    
    for(int i=0;i<max_len;i++)
        printf("%d\n",*(arr+i));
}

程序运行 max_len=8 或低但不超过它。为什么会这样?提前致谢。

解决方法

一些事情:

  • 首先,您应该使用 & 通过引用传递您的数组。您按值传递指针,但无效。

  • 其次,您忘记使用 sizeof(int) 进行重新分配,相当于 4。

  • 第三,您必须按以下方式分配您的值:*(*(ptr) + len - 1) = ele;

查看下面更正后的代码:

#include<stdio.h>
#include<stdlib.h>

void add(int** ptr,int len,int ele){
    *ptr = (int*)realloc(*ptr,len*sizeof(int));
    *(*(ptr) + len - 1) = ele;
}

void main(){

    int max_len = 10;

    int* arr = (int*)malloc(sizeof(int));

    for(int i=0;i<max_len;i++)
        add(&arr,i+1,i);

    printf("The elements are...\n");

    for(int i=0;i<max_len;i++)
        printf("%d\n",arr[i]);
}

输出:

0
1
2
3
4
5
6
7
8
9

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。