c++ - 在类中访问 malloc'd 二维数组时出现段错误

标签 c++ arrays malloc

这是一个包含称为“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]在循环中清除分配的内存。

但是

  1. 当你分配内存时,你应该释放它(有 malloc,没有空闲可见)
  2. 在 C++ 中使用 new[]delete[]而不是 malloc
  3. 更好 - 使用 std::vector<std::vector<char>>

关于c++ - 在类中访问 malloc'd 二维数组时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437616/

相关文章:

c++ - 为什么 128 位变量应该与 16 字节边界对齐

python - 对 numpy 数组有多个相等条件

将全局 char** 复制到新的 char**

c++ - 这是制作迭代器的可接受方式吗?

c++ - ISO C++ 禁止声明错误

c++ - 无法在 Netbeans IDE 7.2 中包含队列/堆栈 C++ STL 类

arrays - Tensorflow 中的二进制掩码

java - 二进制数据图像转换不等于同一图像的jpg

c - c 中的 malloc,结构

c - 如何在指针上正确使用 malloc?