JHn*_*net 4 c pointers initialization
我想要一个C函数来读取文件并返回一个动态的int数组.初始化此数组指针的最佳方法是什么?
我目前的版本:
void readFile(int* array,int* size){
// ...read the file and see there are X integers...
array = malloc(X * sizeof(int));
*size = X;
// ... fill the array ...
}
int main() {
int* array;
int size;
readFile(array,&size);
//Work with array
return 0;
}
Run Code Online (Sandbox Code Playgroud)
这给了我单一化的警告,只是这样做
int* array = NULL
Run Code Online (Sandbox Code Playgroud)
或者有更好,更清洁的方法来实现这一目标吗?
技术评论
首先,你有问题,因为readFile需要int *,而不是int **.如果你有
void readFile(int **array, int *size) {
*array = malloc(X * sizeof(int));
...
Run Code Online (Sandbox Code Playgroud)
你实际上可以像在里面那样称呼它
int main() {
int *array, size;
readFile(& array, & size);
...
Run Code Online (Sandbox Code Playgroud)
所以来电者array会指出readFile分配的内容.
设计问题
对于您的具体问题,只要清楚地理解初始化/分配和清理的责任,技术上两者都是可能的:
main分配数组,并readFile填充它.readFile 使用文件内容分配和填充数组.main可以分配内存,因为它是知道何时清理(释放内存)的功能.否则,实现的单元readFile也可以实现freeFile其他人使用的功能.