如何在函数内部使用`malloc/calloc`?
How to use `malloc/calloc` inside a function?
我想创建一个函数 fill_table
来动态填充 table。 table的尾部n
是在main()函数中声明的,
int n = 0;
float* *T;
void show_table(int n) {}
void fill_table(int n) {}
int main() {
printf(" Table dimension: ");
scanf("%d", &n);
fill_table(n);
show_table(n);
return 0;
}
我总是遇到这个错误:
segmentation fault ./a.out
我尝试了这样的功能:
int n = 0;
float* *T=0;
void show_table(int n){
printf("Show Table: \n");
for (int i = 0; i < n; i++) {
printf("%f ", *(T + i));
}
}
void fill_table(int n) {
*T=(float*)calloc(n, sizeof(float));;
if (!T){
printf("Memoire not allowe\n");
exit(0);
} else {
for (int i = 0; i < n; i++) {
printf("\nT[%d]= ", i+1);
scanf("%f", (T + i));
}
}
}
经过反复试验,我找到了这个解决方案:
必须将 table 声明为
float* T; //not float* *T;
函数fill_table
:
void fill_table(int n) {
T=(float*)calloc(n, sizeof(float));;
if (!T){
printf("Memoire not allowe\n");
exit(0);
} else {
for (int i = 0; i < n; i++) {
printf("\nT[%d]= ", i+1);
scanf("%f", (T + i));
}
}
}
函数show_table
:
void show_table(int n){
printf("Show Table: \n");
for (int i = 0; i < n; i++) {
printf("%f ", *(T + i));
}
}
我想创建一个函数 fill_table
来动态填充 table。 table的尾部n
是在main()函数中声明的,
int n = 0;
float* *T;
void show_table(int n) {}
void fill_table(int n) {}
int main() {
printf(" Table dimension: ");
scanf("%d", &n);
fill_table(n);
show_table(n);
return 0;
}
我总是遇到这个错误:
segmentation fault ./a.out
我尝试了这样的功能:
int n = 0;
float* *T=0;
void show_table(int n){
printf("Show Table: \n");
for (int i = 0; i < n; i++) {
printf("%f ", *(T + i));
}
}
void fill_table(int n) {
*T=(float*)calloc(n, sizeof(float));;
if (!T){
printf("Memoire not allowe\n");
exit(0);
} else {
for (int i = 0; i < n; i++) {
printf("\nT[%d]= ", i+1);
scanf("%f", (T + i));
}
}
}
经过反复试验,我找到了这个解决方案:
必须将 table 声明为
float* T; //not float* *T;
函数
fill_table
:void fill_table(int n) { T=(float*)calloc(n, sizeof(float));; if (!T){ printf("Memoire not allowe\n"); exit(0); } else { for (int i = 0; i < n; i++) { printf("\nT[%d]= ", i+1); scanf("%f", (T + i)); } } }
函数
show_table
:void show_table(int n){ printf("Show Table: \n"); for (int i = 0; i < n; i++) { printf("%f ", *(T + i)); } }