2017-09-16 56 views
-2

我正试图潜入一点C编程。所以我试图用双指针创建一个二维数组并用随机值初始化它。在访问阶段但是它抛出一个分段错误C 2-d数组初始化抛出段错误

下面是我的代码条纹下来片段:

int main(void){ 

// Memory allocation for arrays 

int size = 3; 

double **matrix = (double **)malloc(sizeof(double *)*size*size); 

int i, k; 

for(i=0; i<size; i++){ 
     for(k=0; k<size; k++){ 
     matrix[i][k] = ((double)rand())/1314.7; 
     } 
} 

return 0; 
} 

可否请你指出我什么我做错了吗?

+0

http://www.geeksforgeeks.org/dynamically-allocate-2d-array-c/ – NiVeR

+1

你有什么是*不是一个2D数组,所以请不要像一个初始化它。 –

+0

顺便说一句,https://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc?rq=1 – Jens

回答

-1

这个指针的指针表,你需要在真正的代码,你需要检查的malloc没有双打:)

double *matrix = malloc(sizeof(double)*size*size); 

int i, k; 

for(i=0; i<size; i++){ 
     for(k=0; k<size; k++){ 
     matrix[i * size + k] = ((double)rand())/1314.7; 
     } 
} 

**

double **matrix = malloc(sizeof(double *)*size); 

for(int i = 0; i < size; i++) 
    *(matrix + i) = malloc(sizeof(double) * size); 

for(i=0; i<size; i++){ 
     for(k=0; k<size; k++){ 
     matrix[i][k] = ((double)rand())/1314.7; 
     } 
} 

当然的表失败等等

+0

没有你的节目(没有解释,顺便说一句)是一个二维数组。 OP想要一个二维数组,所以他应该使用一个。 – Olaf

+0

不清楚他想要什么。我看到了'*'和mallics。所以我走了指针的道路。 @你当然知道:D –

+0

如何使用指针/动态分配防止使用2D数组? – Olaf