gpt4 book ai didi

c++ - 当我向 添加对象时出现段错误

转载 作者:行者123 更新时间:2023-11-28 01:08:45 24 4
gpt4 key购买 nike

我用两种不同的方式编写代码片段:使用二维数组作为矩阵,以及使用 boost::ublas::matrix。当我在第一种情况下将此对象添加到它时它正在工作,但在第二种情况下我遇到了段错误。我想使用第二种方式,所以如果有人知道我为什么会遇到段错误,我将不胜感激。

代码:

img.h

#include <Magick++.h>
#include <string>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

using namespace boost::numeric::ublas;
using namespace std;
using namespace Magick;

class Img
{
public:
Img();
Img(const string path2file);

unsigned int width, height;
string filename;
private:
typedef struct pix
{
Quantum R;
Quantum G;
Quantum B;
} pix;

matrix<pix> p;

pix **pixels;
string format;
};

img.cpp

Img::Img(const string path2file)
{
Image file;
unsigned int i, j;
Color pixel;

file.read(path2file);

filename = path2file;
width = file.size().width();
height = file.size().height();

// begin of first way
pixels = (pix**)malloc(sizeof(pix*)*height);
for(i=0 ; i<height ; ++i)
pixels[i] = (pix*)malloc(sizeof(pix)*width);

for(i=0 ; i<height ; ++i)
{
for(j=0 ; j<width ; ++j)
{
pixel = file.pixelColor(j, i);

pixels[i][j].R = pixel.redQuantum();
pixels[i][j].G = pixel.greenQuantum();
pixels[i][j].B = pixel.blueQuantum();
}
}
// end of first way

// begin of second way
p.resize(height, width);
for(i=0 ; i<height ; ++i)
{
for(j=0 ; j<width ; ++j)
{
pixel = file.pixelColor(j, i);

p(i, j).R = pixel.redQuantum();
p(i, j).G = pixel.greenQuantum();
p(i, j).B = pixel.blueQuantum();
}
}*/
}
// end of second way

我很确定这段代码不是段错误的原因。但是当我在主程序中使用它时,我遇到了段错误(仅适用于第二种方式,第一种方式有效):

main.cpp

#include <iostream>
#include <stdio.h>
#include "img.h"
#include <vector>

using namespace std;

int main(void)
{
std::vector<Img> files;
files.push_back(Img("files/mini.bmp"));
return 0;
}

最佳答案

将程序加载到 gdb 并使其崩溃。在 gdb 控制台中键入 bt 或 backtrace,您将获得所有调用的堆栈帧,您可以看到导致段错误的原因。

关于c++ - 当我向 <vector> 添加对象时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4695941/

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