我幾年來沒有用過純C了,但是我似乎無法做出這個真正基本的用例工作。下面是簡單C中的簡單用例,實際情況包含在HDF庫中,但我首先需要從此開始。C,傳遞2維數組
#include <stdio.h>
void print_data(float **data, int I, int J)
{
for(int i=0;i<I;i++)
{
for(int j=0;j<J;j++)
printf("%02.2f\t", data[i][j]);
printf("\n");
}
}
void initialize_data(float **data, int I, int J)
{
for(int i=0;i<I;i++)
for(int j=0;j<J;j++)
data[i][j] = i * 6 + j + 1;
}
int main(int argc, char *argv[])
{
float data[4][6];
int I=4;
int J=6;
initialize_data((float **)data, 4,6);
print_data((float **)data, 4, 6);
return 0;
}
上述程序將導致失敗併產生EXC_BAD_ACCESS信號。 GDB輸出:
Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_PROTECTION_FAILURE at address: 0x00007fff5fc0131a
0x0000000100000de6 in initialize_data (data=0x7fff5fbff348, I=4, J=6) at simple.c:16
16 data[i][j] = i * 6 + j + 1;
我知道這真的很愚蠢簡單,但我在我的智慧'結束試圖找出這個簡單的事情。有人能爲我指出正確的方向嗎?
此代碼沒有二維數組,這是一個指針指針。刪除main(float **)強制轉換並啓用所有編譯器警告。 [相關問題](http://stackoverflow.com/questions/12462615/how-do-i-correctly-set-up-access-and-free-a-multidimensional-array-in-c)。 – Lundin
二維數組與指針指針(**)不同。數組的名稱'data'仍然只是一個指針(基地址)。這可能是EXC_BAD_ACCESS的根源。 –
-1。關於同一主題有許多問題,甚至第一個問題也不應該被問到(因爲任何優秀的C教程都會清除這個問題。) – 2012-12-06 18:42:36