gpt4 book ai didi

c++ - 如何找到错误 : *** Error in `./a.out' : free(): invalid next size (fast): 0x09767150 ***

转载 作者:行者123 更新时间:2023-11-28 06:13:52 24 4
gpt4 key购买 nike

我的 main.cpp 和 grid.h 编译成功。当我在调整网格大小后使用函数 fill 时会出现问题。运行程序后会产生错误:

* Error in `./a.out': free(): invalid next size (fast): 0x0871d150 *

主要.cpp

#include "grid.h"
#include <cstdlib>

#if 1
#define log(x) std::cout << x << std::endl;
#else
#define log(x)
#endif

#ifdef _GLIBCXX_CSTDLIB
#define clear system("clear");
#define reset system("reset");
#else
#define clear
#define reset
#endif

std::pair<const int, const int> LARGE = std::make_pair(8,8);
std::pair<const int, const int> MEDIUM = std::make_pair(6,6);
std::pair<const int, const int> SMALL = std::make_pair(4,4);


int main(){
clear
grid<char> a(LARGE,'#');
grid<int> b(4,5, 9 );
a.resize(4,8);
b.resize(MEDIUM);
b.fill(8);
log(a);
log(b);
return 0;
}

网格.h

#ifndef GRID_H
#define GRID_H

#include <iostream>
#include <vector>

template<typename type>
class grid{
public://Functions
grid(std::pair<const type, const type> dimension, type filler = 0) : rows(dimension.first), cols(dimension.second){
matrix.assign(rows, std::vector<type>(cols, filler));
};
grid(const int _rows, const int _cols, type filler = 0) : rows(_rows), cols(_cols){
matrix.assign(rows, std::vector<type>(cols, filler));
};
void resize(std::pair<const type, const type> dimension){
rows = dimension.first, cols = dimension.second;
matrix.resize(rows, std::vector<type>(cols));
};
void resize(const int _rows, const int _cols){
rows = _rows, cols = _cols;
matrix.resize(rows, std::vector<type>(cols));
};
void fill(type filler){
for(int r = 0; r < rows; r++){
for(int c = 0; c < cols; c++){
matrix[r][c] = filler;
}
}
};
public://Operators
friend std::ostream& operator<<(std::ostream& out, grid& g){
for(int r = 0; r < g.rows; r++){
for(int c = 0; c < g.cols; c++){
out << g.matrix[r][c];
}out << std::endl;
}return out;
};
//Variables
std::vector<std::vector<type>> matrix;
int rows;
int cols;
};

#endif//GRID_H

控制台输出

dylan@Aspire-one:~$ ./a.out
########
########
########
########

888888
888888
888888
888888
888888
888888

*** Error in `./a.out': free(): invalid next size (fast): 0x09767150 ***
Aborted (core dumped)
dylan@Aspire-one:~$

最佳答案

Error in './a.out': free(): invalid next size (fast): 0x0871d150

此错误总是意味着您的程序损坏了它的堆(例如写入超过堆分配缓冲区的末尾)。

找到这个问题的标准方法是在 Valgrind 下运行您的程序,它会直接指出问题所在。

Address sanitizer (gcc -fsanitize=address -g ...) 是另一种用于查找此地址的标准工具。

关于c++ - 如何找到错误 : *** Error in `./a.out' : free(): invalid next size (fast): 0x09767150 ***,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30698428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com