我的目標:這是一個程序,它接收用戶指定的數字以生成大小爲全球的二維數組, 「尺寸」列
這是一個更大的程序我的工作,這需要該陣列是全球C-2D全局數組 - >在大小> 4時運行到分段錯誤
前的一小部分的量:用戶運行與./a.out 5 的節目的節目製作5行5列的全球陣列,並將其輸出給用戶
我的問題:可以創建大小爲0,1,2,3和4的數組,而沒有問題。只要我用5的用戶輸入運行程序,它給我一個分段錯誤。這似乎與最後一行(S)的一個問題,但我不明白爲什麼它爲輸入> = 5
我做了什麼/試過:雖然陣列必須是全球 ,我試圖通過將「int **」放在「array =」代碼的前面來讓數組不是全局數組。這不會改變我的問題,所以我不認爲這與它是全球
我的問題,要做到:
爲什麼我的程序給我一個分段錯誤的輸入時 大於或等於5?
我該如何讓它接受大數字的輸入而仍然 保持它作爲一個全局數組?
我的代碼:
#include <stdio.h>
#include <stdlib.h>
//method declarations
void fill_array();
//global variables
int **array;
int size;
int main(int argc, char** argv){
//fill the array with size specified by user
//ASSUME THE USER INPUT TO BE A VALID INTEGER
if(argc==2){
fill_array(argv);
}
}
void fill_array(char** argv){
//initialize the variables
int i,j;//loop counters
//set size of array
size = atoi(argv[1]);
//make array of size 'size'
int **array = (int**)malloc(size*sizeof(int));//initialize the array to hold ints
for(i=0; i<size; i++){
array[i] = (int*) malloc(size*sizeof(int));//initialize the second dimension of the array
}
//fill the array with values of i*j
for(i=0; i<size; i++){
for(j=0; j<size; j++){
printf("i: %d and j: %d ",i,j);
array[i][j] = i*j;//put a value in the array
printf("... and we succeeded\n");
}
}
//print the array when we are done with it
for(i=0; i<size; i++){
for(j=0; j<size; j++){
printf("%d ",array[i][j]);
}
printf("\n");
}
}
歡迎來到Stack Overflow!這聽起來像你可能需要學習如何使用調試器來遍歷代碼。使用一個好的調試器,您可以逐行執行您的程序,並查看它與您期望的偏離的位置。如果你打算做任何編程,這是一個重要的工具。進一步閱讀:[如何調試小程序](http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)。 –
請注意,它是[多餘的並且潛在危險的是將malloc和朋友的結果轉換爲C](http://stackoverflow.com/q/605845/253056)。 –
爲什麼你重新聲明'int **數組'?第一個malloc應該是'malloc(size * sizeof(* int))'。但我認爲,調試必須是你的方式。 –