在单独的线程中转换大图像(大于1Mb)时,ImageMagick lib崩溃。
我的简单测试程序也因相同的消息而崩溃:
#include <thread>
void foo()
{
const int size = 0x7FCC9; //program crashes when size is equal or more than this value
char buff[size];
for(int i = 0; i < size; ++i)
{
buff[i] = i;
}
}
int main(int argc, char *argv[])
{
foo(); //passed!
std::thread thr(foo);
thr.join(); //got error :(
return 0;
}
我== 58736 :)
Thread2: EXC_BAD_ACCESS (code=2, address = 0x103512000)
为什么我的简单代码会产生此错误?
如何在MAC OS上增加线程的内存大小?
最佳答案
主线程中的堆栈大小多于子线程中的堆栈大小,因此在主线程中,您的缓冲区保持在堆栈大小之内,但在子缓冲区中传递出去,则得到线程2:EXC_BAD_ACCESS(代码= 2,地址= 0x103512000)
我建议您使用增强线程:
boost::thread::attributes attrs;
attrs.set_size(4096*10);
boost::thread myThread(attrs, fooFunction, 42);
http://www.boost.org/doc/libs/1_51_0/doc/html/thread/thread_management.html#thread.thread_management.tutorial.attributes
关于multithreading - MAC OS X Yosemite上的简单多线程程序中的错误访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30855663/