2016-10-30 61 views
2

註釋掉scanf循環後,分段故障錯誤消失。爲什麼這個循環給我一個分段錯誤?我爲什麼從scanf循環中獲得分段錯誤?

char** nameArray = malloc(numNames * sizeof(char *)); 

for(i =0; i< 10; i++) { 
    nameArray[i] = malloc(25 * sizeof(char)); 
} 

for (i = 0; i< numNames; i++) { 
    scanf("%s", &nameArray[i]); 
} 

for (i =0; i<numNames; i++) { 
    free(nameArray[i]); 
} 
+0

要掃描的字符串有多長時間?嘗試malloc大數組,看看它是否修復了這個問題。 – Tmx

+0

掃描到'nameArray [i]',而不是'&nameArray [i]'。同樣使用'「%24s」'作爲格式字符串並檢查'scanf'的返回值。 –

回答

2

首先,你需要改變

for(i =0; i< 10; i++) { 

for(i =0; i< numNames; i++) { 

,因爲你需要創造足夠的條目。

你也需要這一行

scanf("%s", &nameArray[i]); 

改變

scanf("%s", nameArray[i]); 

nameArray[i]是需要一個字符指針。

而且這將是更好地使用

scanf("%24s", nameArray[i]); 

,因爲這將防止緩衝區溢出。此外,它是檢查的很少

2

這是因爲nameArray[i]已經是一個指針,從malloc獲得的返回值是一個好主意,所以你只需要到該指針傳遞給scanf,使用

scanf("%s", nameArray[i]); 

沒有&

1

你必須照顧分配;你的情況,你只分配10 namearray元素

你必須做出分配的所有變量 你會SCANF: 變化10 numNames

for(i =0; i< numNames; i++) { 
    nameArray[i] = malloc(25 * sizeof(char)); 
} 

和&符號用於與指針的情況下師範學校CHARLS不要使用它;

scanf("%s",nameArray[i]); 
相關問題