首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >名为"cell“的结构的自由2d数组(矩阵),其中每个数组都是string(char*)的成员

名为"cell“的结构的自由2d数组(矩阵),其中每个数组都是string(char*)的成员
EN

Stack Overflow用户
提问于 2018-08-31 13:27:10
回答 1查看 29关注 0票数 1

拨款:

代码语言:javascript
复制
cell **initBoard(int boardSize)
{
    int i, j, k;
    cell **matrix;
    matrix = (cell **) malloc((boardSize + 1) * sizeof(cell *));

    // init upper frame
    matrix[0] = (cell *) malloc((boardSize + 1) * sizeof(cell));
    matrix[0][0].type = (char *) malloc(3 * sizeof(char));
    matrix[0][0].type[0] = ' ';

    for (k = 1; k <= boardSize; k++)
    {
        // +1 for null char ?
        matrix[0][k].type = (char *) malloc(3 * sizeof(char));
        matrix[0][k].type = arrNo[k - 1];
    }

    // init inner rows
    for (i = 1; i <= boardSize; i++)
    {
        matrix[i] = (cell *) malloc((boardSize + 1) * sizeof(cell));

        // first letter each row
        matrix[i][0].type = (char *) malloc(3 * sizeof(char));
        matrix[i][0].type[0] = (char) (BASE_ALPHABET + i);

        // init cols
        for (j = 1; j <= boardSize; j++)
        {
            matrix[i][j].type = (char *) malloc(2 * sizeof(char) + 1);
            matrix[i][j].type[0] = EMPTY;
            matrix[i][j].type[1] = WATER; // default status
            matrix[i][j].hidesShip = NULL;
        }
    }
    return matrix;
}

配置:

代码语言:javascript
复制
void freeMatrix(cell **matrix, int boardSize)
{
    int k, l;
    for (k = 0; k <= boardSize; k++)
    {
        for (l = 0; l <= boardSize; l++)
        {
            free(matrix[k][l].type);
        }
        free(matrix[k]);
    }
    free(matrix);
}

我运行上面的代码(显示malloc+ free ),然后用Val差尔检查内存泄漏,得到如下输出:

瓦尔菲德原木,你知道我在这里做错了什么吗?瓦伦的意思是我做了一个额外的免费命令?我看不出确切的位置,因为我移动了所有的细胞。也许这里需要更好的理解指针?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-31 13:41:11

代码语言:javascript
复制
matrix[0][k].type = (char *) malloc(3 * sizeof(char));
matrix[0][k].type = arrNo[k - 1];

问题是,您正在分配内存,并且在写入包含地址的指针之后将内存分配到内存中。因此,您无法再访问内存,因此val差尔将其报告为泄漏。

你可能想写

代码语言:javascript
复制
    matrix[0][k].type[0] = arrNo[k - 1];

假设arrNo是一个字符数组,第一个赋值将是非法的,因为您将char分配给char *。您的编译器应该给您一个警告。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52116498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档