gpt4 book ai didi

c++ - 检测到 glibc;内存损坏

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:58 26 4
gpt4 key购买 nike

所以这很奇怪.. 我正在使用 Halide ( https://github.com/halide/Halide/ ),但我得到的错误与 C++ 相关。当我运行代码时,我得到了

*** glibc detected *** ./lesson_04: malloc(): memory corruption: 0x0000000000a36640 ***

它也打印“realizing”但不打印“blur initial”。当我传递等于 1.0 的 sigma 但不适用于 2.0 或 3.0 时它起作用。这是一段较长的代码。更长的代码即使对于 1 也不起作用。我不明白一个值如何影响任何东西以及它卡在哪里。有什么帮助吗?谢谢

#include <Halide.h>
#include <stdio.h>
#include <math.h>

#include "armadillo"
using namespace arma;

using namespace Halide;
#include "../apps/support/image_io.h"


Image<float> calculateGaussian(double sigmaD){
int sigma=(int)sigmaD;
Image<float> convolution(sigma*6+1,sigma*6+1); float sum=0;

for (int i=-sigma*3; i<sigma*3+2; i++){
for (int j=-sigma*3; j<sigma*3+2; j++){
float r=std::sqrt(i*i+j*j);
convolution(i+sigma*3,j+sigma*3)=std::exp(-r*r/(2*sigma*sigma));
sum+=convolution(i+sigma*3,j+sigma*3);
}
}
for (int i=0; i<sigma*6+1; i++){
for (int j=0; j<sigma*6+1; j++){
convolution(i,j)/=sum;
}
}
return convolution;
}

Image<uint8_t> convolve(Image<uint8_t> im, Image<float> convolution){
RDom r(convolution);
int w=convolution.width(), h=convolution.height();
int W=im.width(), H=im.height();
Var x,y,c;
Func blur, input;
input(x, y,c) = im(clamp(x, 0, W-1), clamp(y, 0, H-1),c);
blur(x, y,c) = sum(cast<uint8_t>(convolution(r.x, r.y) * input(x + r.x - w/2, y + r.y - h/2,c)));
Image<uint8_t> out=blur.realize(im.width(),im.height(),im.channels());
return out;
}

Image<uint8_t> blurGaussian(Image<uint8_t> im, float sigma){
printf("blur initial");
Image<float> gaussian=calculateGaussian(sigma);

return convolve(im,gaussian);
}

int main(int argc, char **argv) {

Image<uint8_t> im1 = load<uint8_t>("../apps/images/stata-1.png");
Image<uint8_t> output;
printf("realizing \n");
output=blurGaussian(im1,3.0);
save(output, "blur.png");

printf("Success!\n");
return 0;
}

最佳答案

有时,如果程序过早退出,输出会卡在写入缓冲区中,并且永远不会真正写入控制台。打电话fflush(stdout);将帮助您确定是否属于这种情况。或者使用 fprintf(stderr, ...)对于调试输出,因为 stderr是无缓冲的。

然而,更有可能的是,您的程序实际上确实在打印“实现”和“模糊初始”之间发生的一项主要任务中崩溃了...Image<uint8_t>复制构造函数。

为什么你按值(value)传递并导致拷贝超出我的范围,我更喜欢 const在那里引用以避免复制大对象。不过,如果您的复制构造函数中有错误,绝对值得首先找到并修复它。

关于c++ - 检测到 glibc;内存损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17334051/

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