gpt4 book ai didi

c++ - 将 char [][] 分配给 char**

转载 作者:太空狗 更新时间:2023-10-29 23:25:22 24 4
gpt4 key购买 nike

我正在做一个作业,给定一个二维数组,我们需要用它进行一些计算。

我想将计算逻辑封装到它自己的类中,因此在我的计算类中,我有成员 char**,我试图用给定的 char arr[5][5] 对其进行初始化。我首先尝试做一个 c 风格的转换,让它编译,但如果我尝试引用我的成员变量,则会导致段错误。

简而言之,为什么这行不通

 class MyClass{
Myclass(char arr[5][5]){
m_PmyArr = arr; //doesn't work
}
char** m_PmyArr;
};

为什么编译成功,但在解引用时导致段错误

class MyClass{
Myclass(char arr[5][5]){
m_PmyArr = (char**)arr; //will compile, but will segfault
}
char** m_PmyArr;
};

我希望这不会被解释为“为我做我的工作”,我真的一直在努力更好地掌握指针的细微差别,这与我之前对数组和指针之间关系的理解相反

最佳答案

int[5][5]int** 不同。虽然数组在传递给函数时可以衰减为指针,但在多个数组级别不会发生这种情况。所以两者无法转换。

即使您使指针兼容,您也需要考虑指针的来源。如果它来自一个局部变量,并且该对象比创建它的函数生命周期更长,则该指针将变得无效。

您应该改为动态分配内存:

 class MyClass{
Myclass(int rows, int cols){
int i;
this->rows = rows;
this->cols = cols;
m_PmyArr = new int*[rows];
for (i=0; i<rows; i++) {
m_PmyArr[i] = new int[cols];
}
}
~Myclass() {
int i;
for (i=0; i<rows; i++) {
delete[] m_PmyArr[i];
}
delete[] m_PmyArr;
}
char** m_PmyArr;
int rows, cols;
};

关于c++ - 将 char [][] 分配给 char**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35514167/

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