我正试图了解为什么这无法按我的意愿进行。 我正在尝试在函数内分配一个整数指针,并返回值完整的主函数。我假设您可以执行此操作,因为整数指针只是一个地址,与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;
}
答案 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
。