C语言 如何创建和返回带函数参数的动态数组

hyrbngr7  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(121)

返回带函数参数的动态数组指针时遇到问题。

#include <stdio.h>
#include <stdlib.h>

void createArray(int *ptr, int n)
{
    ptr = malloc(n * sizeof(int));
    for(int i = 1; i <= n; ++i)
    {
        *(ptr + (i - 1)) = i*i;
    }
}

int main() {
    int *array = NULL;
    int n = 5;
    createArray(array, n);
    for(int i = 0; i < n; ++i)
    {
        printf("%d", array[i]);
    }
    return 0;
}

当I从1到n时,我必须用ii填充我的数组。我没有得到任何错误或警告。只有关于分段错误的消息。 过程结束,退出代码为139(被信号11中断:SIGSEGV)*

8i9zcol2

8i9zcol21#

内存必须在调用函数中分配,而不是在被调用函数中分配。

#include <stdio.h>
#include <stdlib.h>

void createArray(int *ptr, int n){
 int i;
    for(i = 1; i <= n; i++)    {
        *(ptr + (i - 1)) = i*i;
// fprintf(stdout,"%d %d\n", i, *(ptr + (i -1)));fflush(stdout);
    }
}

int main() {
    int i, n, *array = NULL;
 void *pvc;
    n = 5;
    array = (int *)malloc(n * sizeof(int));
    createArray(array, n);
    for(i = 0; i < n; i++)    {
        fprintf(stdout,"%d %d\n", i, array[i]);fflush(stdout);
    }
 pvc = (void *)array;
 free(pvc);
    return 0;
}
lndjwyie

lndjwyie2#

您可以通过函数参数更改指针,如下所示:

void createArray(int **ptr, int n)
{
    *ptr = malloc(n * sizeof(int));
    for(int i = 1; i <= n; ++i)
    {
        (*ptr)[i - 1] = i*i;
    }
}

int main() {
    int *array = NULL;
    int n = 5;
    createArray(&array, n);

记住这样调用函数:createArray(&数组,n);

相关问题