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

标签 multithreading macos memory crash imagemagick

在单独的线程中转换大图像(大于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/

相关文章:

java - 为什么这个片段抛出 NullPointerException

javascript - Safari 的 RTCDataChannel 实现完全损坏了吗?

macos - Mac Excel 2011 - 正态分布的直方图

C - 如何释放在其节点中具有链表的链表?

python - 在 Python 中表示图灵机的无限磁带的最有效方法是什么?

PHP 线程 ( pthreads ) 正在工作,但没有任何 Stackable 类

multithreading - "Holding"内存中的数据映射

java - 简单的 Java 示例使用 14 个线程运行。为什么?

c++ - 来自 OSX 应用程序的 Mkdir

c - strcat 用于动态字符指针