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

有没有办法malloc数组大小为10的整数指针并返回其值?,c,arrays,pointers,malloc,C,Arrays,Pointers,Malloc,我正在努力理解为什么这不能像我希望的那样起作用。 我试图在一个函数中malloc一个整数指针,然后返回到主函数,并且值保持不变。我假设您可以这样做,因为整数指针只是一个地址,与size变量相同。所以我认为newPtr将包含值的内容,但它没有。为什么会这样 我试着看看如何使这项工作,但我唯一想到的是使函数参数类型int**arr #include <stdio.h> #include <stdbool.h> #include <stdlib.h> bool r

我正在努力理解为什么这不能像我希望的那样起作用。 我试图在一个函数中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;
}
#包括
#包括
#包括
bool readData(int*arr,int*size);
int main(){
int i;
int countSize=10;
int*newPtr;
bool-rtv=true;
rtv=读取数据(newPtr和countSize);
如果(rtv==假){
printf(“读取数据失败\n”);
返回-1;
}
对于(i=0;i
问题在于您使用的是常规指针:

bool readData(int * arr, int * size)
因此,当您在其中按如下方式分配时:

    arr = malloc(sizeof(int*) * *size);
您正在更改指针的本地值。要操作根值,需要执行以下操作:

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

当该值在修改后从未使用过时,您为什么要操纵
size
。将其作为指针发送到上面会使事情复杂化。你迭代了一半的数组,因为只有一半的数组“存在”,这使得这个大小有误导性。很抱歉,这只是一个例子来解释为什么int*arr不起作用。int*size是我在程序中使用的占位符。谢谢你的帮助。我想理解它的最好方法就是把它看作一个局部变量。我使用了您的第一个方法,因为我需要返回一个布尔值。看到int**arr很奇怪,因为这让我想起了二维数组。数组不是指针,指针也不是数组(尽管数组在访问时会衰减为指针)
int**
是指向
int
指针的单指针。首先分配一定数量的指针,并将该块分配给指针(例如,
int**data=malloc(nptrs*sizeof*data);
),然后分配将通过每个指针访问的
int
数量(例如,
data[i]=malloc(numint*sizeof*data[i]);
记住验证每个分配。