2013-03-19 69 views
1

不知道爲什麼我不能得到這個,但..從地址構造在C指針

我最初得到另一個處理器的指針的地址,我需要一個指向那個項目的指針地址。不要太擔心MPI_Recv,只要知道我正在從另一個處理器獲取信息。所以我有:

MPI_Recv(&a, sizeof(int), MPI_INT, 0, 1, MPI_COMM_WORLD, &status); 

c = a; 
printf("%d",c[0]); 

爲什麼這會給我一個分段錯誤?我曾嘗試在設置c = a之前爲c分配內存,並且它仍然會出現seg錯誤。想法?我已經嘗試過在線觀看了很長一段時間,並且找不到任何東西。在此先感謝

+0

先搜索虛擬內存地址。 – StarPinkER 2013-03-19 07:21:14

+0

另一個非常相關的細節:哪個操作系統? – hyde 2013-03-19 07:23:46

+0

操作系統:Linux。這是一個並行應用程序,應該是處理器我相信 – 2013-03-19 07:25:20

回答

6

每個過程都有自己的單獨virtual address spaces。來自一個過程的指針在另一個過程中毫無意義。

您有幾種選擇:

  1. 使用threads,而不是過程。
  2. 使用shared memory
  3. 發送實際數據而不僅僅是一個指針。

如果您的進程可以駐留在不同的計算機上,那麼只有最後一個選項是可行的。

+0

謝謝!說得通。 – 2013-03-19 07:22:56

+0

由於共享內存段可能映射到每個進程的不同虛擬地址,因此使用共享內存時仍需提供相對地址而不是直接指針。 – 2013-03-20 07:49:25