瓦尔格林德错误 - 地址0x0不是堆叠的 malloc'd 或自由的
Valgrind Error - Address 0x0 is not stack'd malloc'd or free'd
我正在尝试根据主行参数中声明的列数和行数分配内存。例如,a.out 2 4 6 表示运行 a.out 有 2 个玩家、4 列、6 行。
我希望内存与board_init函数一起分配,但 valgrind 返回: 读取大小 1 无效,user_input_players(整数,字符**( 并且堆已分配 0,释放 0,并且没有泄漏。
我只熟悉新命令和删除命令。我不确定如何理解错误消息。
// function declaration
int user_input_players(int choices, char** selection);
int user_input_columns(int choices, char** selection);
int user_input_rows(int choices, char** selection);
int board_init(int columns, int rows);
int main(int argc, char** argv) {
int column = 0, row = 0, player = 0;
player = user_input_players(argc, argv);
column = user_input_columns(argc, argv);
row = user_input_rows(argc, argv);
board_init(column, row);
return 0;
}
int user_input_players(int choices, char** selection){
int player_count = 0;
for(int i = 0; i < choices; i++){
selection[i];
}
while( !(*selection[1] == '1' || *selection[1] == '2')){
cout << "Please enter number of players: " << endl;
cin.clear();
cin >> player_count;
if(player_count == 1 || player_count == 2){
return player_count;
}
player_count = *selection[1];
return player_count;
}
}
int user_input_columns(int choices, char** selection){
int column_count = 0;
for(int i = 0; i < choices; i++){
selection[i];
}
column_count = atoi(selection[2]);
if(column_count >= 4 && column_count <= 20){
return column_count;
}
while( !(column_count >= 4 && column_count <= 20)){
cout << "Please enter number of columns: " << endl;
cin.clear();
cin >> column_count;
if(column_count >= 4 && column_count <= 20){
return column_count;
}
}
}
int user_input_rows(int choices, char** selection){
int row_count = 0;
for(int i = 0; i < choices; i++){
selection[i];
}
row_count = atoi(selection[3]);
if(row_count >= 4 && row_count <= 20){
return row_count;
}
while( !(row_count >= 4 && row_count <= 20)){
cout << "Please enter number of rows: " << endl;
cin.clear();
cin >> row_count;
if(row_count >= 4 && row_count <= 20){
return row_count;
}
}
}
void board_init(int columns, int rows){ // Valgrind shows no memory allocation because of error
int** board = new int*[rows];
for(int i = 0; i < rows; i++){
board[i] = new int[columns];
}
}
如果允许您使用矢量,请将init_board函数更改为使用 2d 矢量:
vector<vector<int> > vec( row , vector<int> (column));
这将防止正在发生的内存泄漏。您还应该考虑直接在 main 中执行此操作。或者,如果你想保持函数的原样,你应该考虑从你的函数返回int**
并将其存储在 main 中的int**
变量中,以便以后可以删除它。当前您有内存泄漏,因为您永远不会删除在board_init
中分配的内存。
相关文章:
- 如果没有malloc,链表实现将失败
- malloc() 可能出现内存泄漏
- Cuda C++:设备上的Malloc类,并用来自主机的数据填充它
- 如何针对特定情况调试和修复此双自由内存损坏问题
- 将自由函数绑定为类成员函数
- 静态数组的自由动态数组
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 在C++中创建队列 - 什么是 malloc 错误?
- 如何在 malloc 内存中初始化非 POD 数据
- 调试和自由执行中的信号处理
- 使用 malloc() 时出现意外大小
- C++:在被本地字符串捕获后释放或销毁 malloc'd char *?
- 错误:malloc:对象 0x7f9edf504080 的 *** 错误:未分配正在释放的指针
- 将 malloc 替换为数组
- 如何将成员函数作为回调参数传递给需要"typedef-ed"自由函数指针的函数?
- 瓦尔格林德错误 - 地址0x0不是堆叠的 malloc'd 或自由的
- Malloc后的自由功能错误
- 在方法上使用malloc,在主要工作中自由
- c++的malloc和自由对象的创建和删除
- 如何正确使用malloc和自由内存