dynamicRandomMatrix函数应返回一个指向n个指针的数组的指针,每个指针均指向n个随机整数的数组。
我得到它可以打印出大多数正确的字符,除了数组中的第一个数字。这是输出:n = 3:-2084546528、59、45,n = 5:-2084546352、88、13、61、36
有人可以帮我弄清楚为什么数组中的第一个数字这么小吗?我认为这一定与局部变量和访问有关,但我不确定。
#include <stdlib.h>
#include <time.h>
int* randomArray(int n){
int *array;
array = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
int num = (rand() % (100 - 1 + 1)) + 1;
array[i] = num;
}
return array;
free(array);
}
int** dynamicRandomMatrix(int n){
int **ptr;
ptr = malloc(sizeof(int) * n);
for (int i = 0; i < n; i++) {
int *address = randomArray(n);
ptr[i] = address;
}
return ptr;
free (ptr);
}
int main(){
int **ptr;
int i;
//Array where n = 3
ptr = dynamicRandomMatrix(3);
printf("n=3: ");
for (i = 0; i < 3; i++) {
printf("%d, ", *ptr[i]);
}
//Array where n = 5
ptr = dynamicRandomMatrix(5);
printf("\nn=5: ");
for (i = 0; i < 5; i++) {
printf("%d, ", *ptr[i]);
}
return 0;
}```
在您的代码中,
ptr = malloc(sizeof(int) * n);
不正确,应该为ptr = malloc(sizeof(int*) * n);
。为了避免这种情况,您可以使用以下形式:
ptr = malloc(sizeof(*ptr) * n);