动态二维数组以及char 跟 int 效率

动态二维数组以及char 和 int 效率
C/C++ code

char g_grid, g_high, g_wide;
char i, j;

//动态创建二维数组
g_grid = (char**)malloc(g_high * sizeof (char));
for (i=0; i<g_high; ++i)
{
    g_grid[i] = (char*)malloc(g_wide * sizeof (char));
                
    for (j=0; j<g_wide; ++j)
    {
        g_grid[i][j] = 115;
    }
}

//释放部分
for (i=0; i<g_high; ++i)
{
    free(g_grid[i]);
}
free(g_grid);




程序关闭时会弹出一个错误对话框内容大概如下
Debug Assertion Failed!

Expression: CrtIsValidHeapPointer(pUserData)
……

屏蔽释放部分则程序正常。不屏蔽也正常,就是在程序关闭时就会弹出这个对话框。求解...


第二个问题:
如果不考了占用空间, char 和 int 运行效率哪个高?
这个程序 char完全够用了,但是都是数字运算,用不用换成int?

在效率上char 进行加减乘除 会被自动转换int处理么, 或者比处理int类型多一步?

------解决方案--------------------
不考虑高速缓存的因素,int效率应该更高,因为内存io是对齐的,不过大多数程序不会有明显差别
------解决方案--------------------
g_grid = (char**)malloc(g_high * sizeof (char*));
C/C++ code
char **g_grid, g_high, g_wide;
char i, j;

int main()
{
    g_high = 9;
    g_wide = 9; 
    //动态创建二维数组
    g_grid = (char**)malloc(g_high * sizeof (char*));
    for (i=0; i<g_high; ++i)
    {
        g_grid[i] = (char*)malloc(g_wide * sizeof (char));
        
        for (j=0; j<g_wide; ++j)
        {
            g_grid[i][j] = 115;
        }
    }
    
    //释放部分
    for (i=0; i<g_high; ++i)
    {
        free(g_grid[i]);
    }
    free(g_grid);
    return 0;
}

------解决方案--------------------
探讨
引用:

不考虑高速缓存的因素,int效率应该更高,因为内存io是对齐的,不过大多数程序不会有明显差别


哦 我这程序基本上是围绕者g_grid 这个数组做处理,也就是整个程序一直在运算g_grid。

是用int 好还是char 比较好呢.