为什么我无法在 Main 之外的任何地方成功为一维数组分配空间?

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

我正在使用教授的代码来生成 30 个随机数的列表,当我尝试运行它时,它开始抛出错误。我注意到,当我在使用 malloc() 为其分配空间的函数中打印出数组内容时,它们按预期打印出来。但是当我尝试在另一个函数或主函数中打印数组内容时,我得到了垃圾值。

我决定将分配移至 main,从而消除了该问题。但是,我不知道在另一个函数中分配如下所示的空间可能会在数组中存储值时导致问题。 (注意:*values 是未初始化的数组,它在函数内分配给它的内存。在这里分配时,这是唯一正确打印出数组的函数):

void create(int *values, int n ) {
    values = malloc(n*sizeof(int));
    for (int i=0; i<n; i++)
        values[i] = rand()%100;
}

这是主要功能。打印函数无法打印出正确的数组元素。从 main 打印元素也不起作用:

int main() {
    int *nums, mid;
    srand(time(0));
    create(nums, 30);//function where memory is allocated
    print(nums, 30);//function where I try to print array
}

打印功能:

void print(int *values, int n) {
    int i;
    for (i=0; i<n; i++) printf("%d ", values[i]);
    printf("\n");
}
arrays c pointers dynamic-memory-allocation
1个回答
0
投票
void create(int *values, int n ) {
    values = malloc(n*sizeof(int));
    for (int i=0; i<n; i++)
        values[i] = rand()%100;
}

values
参数是一个通过传递的指针。您的函数将 this 重新分配给
malloc
返回的指针,但这对原始指针没有影响。

您需要将指针传递给指针:

void create(int **values, int n ) {
    *values = malloc(n*sizeof(int));
    for (int i=0; i<n; i++)
        *values[i] = rand()%100;
}
© www.soinside.com 2019 - 2024. All rights reserved.