我在试着理解为什么它不能像我想的那样工作。我试图在一个函数内部对一个整数指针进行malloc操作,然后返回到main函数,并保持值不变。我假设你可以这样做,因为整数指针只是一个地址,和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;
}发布于 2019-10-04 11:42:18
问题是您使用的是常规指针:
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。
https://stackoverflow.com/questions/58229528
复制相似问题