MAC OS X Yosemite 上的简单多线程程序中的错误访问

bad access in a simple multi-thread programm on MAC OS X Yosemite

在单独的线程中转换大图像(超过 1Mb)时,ImageMagick 库崩溃。 我的简单测试程序也崩溃并显示相同的消息:

#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线程:

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