首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法对数组大小为10的整数指针进行malloc并返回它的值?

有没有办法对数组大小为10的整数指针进行malloc并返回它的值?
EN

Stack Overflow用户
提问于 2019-10-04 11:26:26
回答 1查看 122关注 0票数 0

我在试着理解为什么它不能像我想的那样工作。我试图在一个函数内部对一个整数指针进行malloc操作,然后返回到main函数,并保持值不变。我假设你可以这样做,因为整数指针只是一个地址,和size变量一样。所以我以为newPtr会包含值的内容,但它没有。为什么会这样呢?

我试着看看如何让它工作,但我唯一的想法是让函数参数类型为int ** arr。

代码语言:javascript
复制
#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;
}
EN

回答 1

Stack Overflow用户

发布于 2019-10-04 11:42:18

问题是您使用的是常规指针:

代码语言:javascript
复制
bool readData(int * arr, int * size)

所以当你像这样赋值的时候:

代码语言:javascript
复制
    arr = malloc(sizeof(int*) * *size);

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

代码语言:javascript
复制
bool readData(int** arr, int * size)

那么你该怎么做呢:

代码语言:javascript
复制
    *arr = malloc(sizeof(int*) * *size);

不过,这有点乱。相反,只需将其转换为返回值:

代码语言:javascript
复制
int* readData(int * size) {
   int* arr = malloc(...);

   // ...
   return arr;
}

并在顶部捕捉到它:

代码语言:javascript
复制
int* rtv = readData(&countSize);

如果出了严重的错误,你可以随时返回NULL

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58229528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档