指针数组中的第一个值不正确

问题描述 投票:0回答:1

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;
}```
c arrays pointers
1个回答
0
投票

在您的代码中,

 ptr = malloc(sizeof(int) * n);

不正确,应该为ptr = malloc(sizeof(int*) * n);。为了避免这种情况,您可以使用以下形式:

ptr = malloc(sizeof(*ptr) * n);
© www.soinside.com 2019 - 2024. All rights reserved.