c++ - 打印二维数组时内存泄漏
问题描述
打印二维数组时出现内存泄漏,我将数据从向量循环到称为网格的向量中
Grid 中的某些索引为 null,例如 grid[8][8] 为 null,但 grid[1][1] 的值为 3。当我显示具有 null 值的网格索引时,会出现内存泄漏。
以下是我的代码,任何建议将不胜感激!
void populateAppendixB(vector<string> cityLocation, int **grid, int col, int row) {
vector<int> data = appendixB_data(cityLocation);
vector<string> appendixB_coordinates = getCoordinates(cityLocation);
vector<int> x_value = returncolValue(appendixB_coordinates);
vector<int> y_value = returnrowValue(appendixB_coordinates);
//loop data into grid[][]
for (int i = 0; i < x_value.size(); i++) {
grid[x_value[i]][y_value[i]] = data[i];
}
cout << " ";
//Top outer Grid
for (int i = 0; i < col + 2; i++) {
cout << " # ";
}
cout << " # ";
cout << endl;
//end
//y-axis
for (int j = row; j >= 0; --j) {
cout << " " << j << " # ";
for (int i = 0; i <= col; ++i) {
//displaying data
if(grid[i][j] == 0) {
cout << " ";
}
else {
cout << grid[i][j] << " ";
}
}
//Right outer Grid
cout << "#";
cout << endl;
}
//Last row of #
cout << " ";
for (int i = 0; i < col + 2; i++) {
cout << " # ";
}
cout << " # ";
cout << endl;
cout << " ";
//x-Axis
for (int i = 0; i <= col; i++) {
cout << i << " ";
}
cout << endl;
}
解决方案
您使用grid[x_value[i]][y_value[i]] = data[i];
,但不会填写所有的,grid
因为您只填写每一列的一个值grid
(您只执行此循环:)for (int i = 0; i < x_value.size(); i++) {
。除非传入的网格是用 ' 正确预填充0
的(根据您提交的代码无法判断),否则这可能是未定义的行为。
即使它是预先填充的二维数组,当您打印 的元素时grid
,您也会从[0, cols]
和进行迭代[0, rows]
,这可能不是您想要的(迭代cols+1
列和rows+1
行。因此,至少最后一个值将访问内存可能无效。
正如之前的评论所提到的,最好只使用std::vector
(例如std::vector<std::vector<int>>
,在使用.at(i).at(j)
访问使用 C++ 异常而不是访问坏内存的元素时),或者甚至std::array
更善于干净地防止和捕获许多问题。如果您担心速度,这可能不是什么大问题,您可以通过例如通过引用传递、在适用的情况下将内容包装在智能指针中、移动语义等来避免复制。
推荐阅读
- python - 为 Python 套接字脚本实现循环
- google-apps-script - 是否可以以编程方式创建一个 Google 表单,并将图像添加到多个简短回答类型的问题中?
- azure - Azure - 我是否应该续订应用注册,因为服务主体设置为一年后过期?
- saml - 在 SAML 响应中,我们应该签署 Response 还是 Assertion
- python - AttributeError:“DataGenerator”对象没有属性“类”
- javascript - Sinon 单元测试。如何对将调用异步函数的函数进行单元测试,然后调用将返回回调的函数?
- python - 第一次之后迭代文件更快
- html - 如何将 Javascript、CSS 和 HTML 内容转换为交互式 pdf 或 .h5p 页面
- amazon-web-services - 在获取 aws cognito 中身份调用的凭证中返回的访问密钥 ID 和秘密是什么?
- python - TypeError:将 ICS 放入 SymPy 时对象不可调用