这是一个包含称为“map”的二维字符数组的类。首先,我将 [mapDimension] char*s 分配给一个 char**。然后,我将 [mapDimension] 字符分配给每个 char*。我这样做而不是静态的:char map[mapDimension][mapDimension] 因为虽然这适用于小数字,但一旦 mapDimension 超过 2500 左右,它也会出现段错误。我想在堆上而不是堆栈上分配内存,这样我就可以容纳更多内存。
构造函数中的最后两行是将二维数组中的每个字符初始化为 0,然后将中心的一个设置为 5。
#define mapDimension 1000
class Field
{
private:
int i;
public:
char** map = (char**)malloc(mapDimension * sizeof(char*));
Field()
{
for(i = 0; i < mapDimension; i++)
map[i] = (char*)malloc(mapDimension * sizeof(char));
memset(map, 0, mapDimension*mapDimension*sizeof(char));
map[mapDimension/2][mapDimension/2] = 5;
}
};
int main()
{
Field field;
return 0;
}
这种动态方法也会出现段错误。我做错了什么?
最佳答案
memset(map, 0, mapDimension*mapDimension*sizeof(char));
您正在清除 map
数组(指针数组),所以 map[x] 现在包含 NULL。你可能应该使用 map[i]
在循环中清除分配的内存。
但是
- 当你分配内存时,你应该释放它(有 malloc,没有空闲可见)
- 在 C++ 中使用
new[]
和delete[]
而不是malloc
- 更好 - 使用
std::vector<std::vector<char>>
关于c++ - 在类中访问 malloc'd 二维数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437616/