首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >用零填充两个维数组的C++

用零填充两个维数组的C++
EN

Stack Overflow用户
提问于 2012-11-11 07:05:33
回答 6查看 93关注 0票数 0
代码语言:javascript
复制
int  ** b;

b = (int **)(new int[5 * 12]);

for (int i = 0; i < 5; i++) {
    for (int j = 0; j < 12; j++) {
        b[i][j] = 0;
    }
} 

我在行b[i][j] = 0;中遇到access violation错误

我哪里做错了?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2012-11-11 07:19:44

由于b的类型为int**,因此表达式b[i]指向偏移量sizeof(int*)*i,而(b[i])[j]添加偏移量sizeof(int)*j。总而言之,您正在访问的偏移量sizeof(int*)*i + sizeof(int)*j处的字节与用于确定平面一维数组中的索引的偏移量sizeof(int)*(i*j)完全不同。

您正在请求一个一维数组,但将其视为二维数组。这是行不通的。像往常一样,选角是罪魁祸首。

票数 2
EN

Stack Overflow用户

发布于 2012-11-11 07:09:21

您的代码在b中分配内存,但这不是您稍后尝试设置的内容。相反,您可以尝试设置未分配的b

票数 2
EN

Stack Overflow用户

发布于 2012-11-11 07:09:38

b未初始化,因此通过它访问会产生未定义的行为。

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

https://stackoverflow.com/questions/13326934

复制
相关文章

相似问题

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