1

一个非常基本的概念疑问。请不要因为这个愚蠢的问题而恨我

如果我们从我的主函数中的线程调用如下函数

    char * function()
    {
            char message[10];
            .................
            ....do sth ......
            return message;
    }

在这种情况下,内部缓冲区是自动的,并在线程函数返回时立即消失。

但是这样做是有效的

    char * function()
    {
            char * message = (char*)malloc(10);
            .................
            ....do sth ......
            return message;
    }

我对下面的行感到困惑。这如何解决问题?

Each thread will allocate a different array and store the address of that array in a stack variable. Every thread has its own stack so automatic data objects are different for each thread.

4

1 回答 1

1

每个线程将分配一个不同的数组并将该数组的地址存储在堆栈变量中。每个线程都有自己的堆栈,因此每个线程的自动数据对象都不同。

此评论与您的​​第二个代码段无关。这个注释的意思是因为每个线程都有自己的堆栈;如果多个线程同时调用同一个函数,它们会将局部变量压入各自的堆栈,因此不会出现冲突。

事实上,您的第二个代码片段之所以有效,是因为每次调用该函数时,您都在动态分配新的堆内存并返回指向它的指针。

注意:一旦你完成它,取消分配内存通常很好:)

另外:请重新查看上面的第一个代码片段和jamescorbin 的评论;这个功能,虽然有些可疑,但不是无效的~例如,看这里

于 2012-04-27T00:17:42.987 回答