有没有办法分配数组大小为10的整数指针并返回其值?

时间:2019-10-04 03:26:26

标签: c arrays pointers malloc

我正试图了解为什么这无法按我的意愿进行。 我正在尝试在函数内分配一个整数指针,并返回值完整的主函数。我假设您可以执行此操作,因为整数指针只是一个地址,与size变量相同。因此,我认为newPtr将具有值的内容,但没有。为什么会这样?

我试图看看如何使它工作,但我唯一想到的就是使函数参数类型为int * * arr。

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

bool readData(int * arr, int * size);


int main() {
    int i;
    int countSize = 10;
    int * newPtr;

    bool rtv = true;
    rtv = readData(newPtr, &countSize);
    if (rtv == false) {
        printf("read data failed\n");
        return -1;
    }

    for (i = 0; i < countSize/2; i++) {
        printf("%d\t", newPtr[i]);
    }
    printf("\n");
    printf("new size: %d\n", countSize);
    free(newPtr);

    return 0;
}

bool readData(int * arr, int * size) {
    int i;

    arr = malloc(sizeof(int*) * *size);
    if (arr == NULL) {
        printf("malloc error\n");
        return false;
    }

    for (i = 0; i < *size; i++) {
        arr[i] = i * i;
    }

    for (i = 0; i < *size; i++) {
        printf("[%d] = %d\n", i, (arr)[i]);
    }
    *size = *size * 2;
    return true;
}

1 个答案:

答案 0 :(得分:0)

麻烦在于您使用的是常规指针:

bool readData(int * arr, int * size)

因此,当您在此处分配时:

    arr = malloc(sizeof(int*) * *size);

您正在更改指针的 local 值。要操纵根值,您需要执行以下操作:

bool readData(int** arr, int * size)

您在哪里做

    *arr = malloc(sizeof(int*) * *size);

这有点混乱。而是将其转换为返回值:

int* readData(int * size) {
   int* arr = malloc(...);

   // ...
   return arr;
}

并将其捕获在顶部:

int* rtv = readData(&countSize);

如果出现严重错误,您可以随时返回NULL