C - 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("%dn",*(arr+i));
}

程序运行max_len=8或低,但不能超过它。为什么会发生这种情况?提前谢谢。

几件事:

  • 首先,您应该通过引用&来传递数组。您通过没有任何效果的值传递指针。

  • 其次,您忘记使用sizeof(int)进行realloc,相当于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("%dn",arr[i]);
}

输出:

0
1
2
3
4
5
6
7
8
9

最新更新