2012-04-27 67 views
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.

+0

第一個功能無效。你不應該返回一個指向堆棧變量的指針。基本上這兩個例子涉及的是堆棧與堆內存分配。 – Corbin 2012-04-27 00:03:17

+2

您不能將指針返回到堆棧上的某個東西。 – James 2012-04-27 00:04:03

回答

1

每個線程將分配一個不同的陣列和的 該數組的地址存儲在堆棧變量。每個線程都有自己的堆棧,因此每個線程的自動數據對象都是不同的。

此評論與您的​​第二個代碼段無關。這個評論意味着什麼,因爲每個線程都有自己的堆棧;如果多個線程同時調用相同的函數,它們會將局部變量推送到各自的堆棧上,因此不會產生衝突。

Infact你的第二個代碼片斷的作品,因爲每次調用函數,你動態分配新的堆內存並返回一個指針。

注:它通常是不錯的,一旦你用它做:)

也解除分配內存:重新您的第一個代碼段以上& james' & corbin's意見;此功能雖然有些疑問無效〜例如,see here