gpt4 book ai didi

c++ - c++ 函数中的 Malloc

转载 作者:太空宇宙 更新时间:2023-11-04 16:20:24 27 4
gpt4 key购买 nike

您好,我正在尝试通过将所有 Malloc 调用(以及后续的 malloc 检查)移动到一个例程中来整理我的代码,如下所示:

int Malloc2D(int n, int m, double** array_ptr) {

array_ptr = (double**) malloc(n * sizeof(double*));
if (array_ptr == NULL) {
std::cout << "ERROR! malloc failed on line " << __LINE__ << "..." << std::endl;
return -1;
}
for (int i = 0; i < n; i++) {
array_ptr[i] = (double*) malloc(m * sizeof(double));
if (array_ptr[i] == NULL) {
std::cout << "ERROR! malloc failed on line " << __LINE__ << "..." << std::endl;
return -1;
}
}

return 0;
}

但是在 main() 中我会做类似的事情:

double** test;
if(Malloc2d(10, 20, test) == -1) return -1;

然后尝试在 main 中使用数组 我遇到了段错误?有人有什么想法吗? jack

最佳答案

由于您传递的是 double **array_ptr,因此它不会修改函数外的指针。

在 C++ 中,您可以通过将其设为引用来修复它(并使用 new,因为它是 C++)

int Malloc2D(int n, int m, double**& array_ptr) {

array_ptr = new double*[n]);
if (array_ptr == NULL) {
std::cout << "ERROR! new failed on line " << __LINE__ << "..." << std::endl;
return -1;
}
for (int i = 0; i < n; i++) {
array_ptr[i] = new double[m];
if (array_ptr[i] == NULL) {
std::cout << "ERROR! new failed on line " << __LINE__ << "..." << std::endl;
return -1;
}
}

return 0;
}

或者,以 C 风格的方式,我们可以使用另一个指针间接(在调用代码中使用 &test 来传递 double ** test 的地址)。

int Malloc2D(int n, int m, double*** array_ptr) {

*array_ptr = (double**) malloc(n * sizeof(double*));
if (array_ptr == NULL) {
std::cout << "ERROR! malloc failed on line " << __LINE__ << "..." << std::endl;
return -1;
}
for (int i = 0; i < n; i++) {
(*array_ptr)[i] = (double*) malloc(m * sizeof(double));
if ((*array_ptr)[i] == NULL) {
std::cout << "ERROR! malloc failed on line " << __LINE__ << "..." << std::endl;
return -1;
}
}

return 0;
}

或者您可以首先简单地返回指向数组的指针 - 但这需要对调用代码进行一些小的更改:

double** Malloc2D(int n, int m) {

double** array_ptr;
array_ptr = (double**) malloc(n * sizeof(double*));
if (array_ptr == NULL) {
std::cout << "ERROR! malloc failed on line " << __LINE__ << "..." << std::endl;
return NULL;
}
for (int i = 0; i < n; i++) {
array_ptr[i] = (double*) malloc(m * sizeof(double));
if (array_ptr[i] == NULL) {
std::cout << "ERROR! malloc failed on line " << __LINE__ << "..." << std::endl;
return NULL;
}
}

return array_ptr;
}

关于c++ - c++ 函数中的 Malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17431318/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com