gpt4 book ai didi

c++ - C 风格字符串和 C++ 中的动态分配

转载 作者:行者123 更新时间:2023-11-30 17:52:07 27 4
gpt4 key购买 nike

我必须实现一系列方法来分配、修改和释放 C 风格字符串的 2D 数组。我不能使用字符串、 vector 或任何 STL 容器。

获取新 Material :

char*** getNewMat(int w, int h){
char*** newMat = new char**[h];
for(int i = 0 ; i < h ; i++){
newMat[i] = new char*[w];
for(int j = 0 ; j < w ; j++)
newMat[i][j] = NULL;
}
return newMat;
}

填充垫

void fillMat(char***mat, int x, int y, char* newEl){
mat[y][x] = newEl; //this will produce a segfault (even with good index)
}

显示垫:

void showMat(char*** mat, int w, int h){
for(int i = 0 ; i < h ; i++){
for(int j = 0 ; j < w ; j++)
cout << mat[i][j];
}
cout << endl;
}

那么,谁能告诉我这有什么问题吗?

最佳答案

在您的 fillMat 方法中,您执行以下操作:

mat[y][x] = newEl;

其中xy是数组两列的维度。该行将导致段错误,因为您超出了数组的范围。 mat 的索引范围为 0 到 length - 1,并且由 xy 设置的值超出了 1 的范围数组。

也许您想循环并设置它们:

for (int i = 0; i < y; ++i)
{
for (int k = 0; k < x; ++k)
mat[i][k] = newEl;
}

此外,在您的 showMat 函数中,您有以下内容:

cout << showMat[i][j];  

我认为你的意思是mat:

cout << mat[i][j];  

关于c++ - C 风格字符串和 C++ 中的动态分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16374267/

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