一个非常基本的概念疑问。请不要因为这个愚蠢的问题而恨我
如果我们从我的主函数中的线程调用如下函数
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.
此评论与您的第二个代码片段无关。这个评论的意思是因为每个线程都有自己的堆栈;如果多个线程同时调用同一个函数,它们会将局部变量压入各自的堆栈,因此不会发生冲突。
事实上,您的第二个代码片段有效,因为每次调用该函数时,您都在动态分配新的堆内存并返回指向它的指针。
注意:通常最好在用完后释放内存 :)
另外:您的第一个代码片段 & james' & corbin's上面的评论;这个函数,虽然有些怀疑不是无效的 ~例如,see here
我是一名优秀的程序员,十分优秀!