realloc() 这里出了什么问题?
what's going wrong here with 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)
进行 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("%d\n",arr[i]);
}
输出:
0
1
2
3
4
5
6
7
8
9
我正在编写使用 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)
进行 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("%d\n",arr[i]);
}
输出:
0
1
2
3
4
5
6
7
8
9