2016-04-13 4 views
-2

イムは「ポインタでなければなりませんそれを修正するには? CRTは、アプリケーションが文字列へのポインタ配列と、この問題が</p> <p>が起こっ作る

char x[50]; 
int num = 0; 
int i = 0; 
char* arrs; 
printf("Enter number"); 
scanf("%d", &num); 
arrs = (char*)malloc(sizeof(char) * num); 
getchar(); 
for (i = 0; i < num; i++) 
{ 
    printf("Enter str number %d\n" , i); 
    fgets(x, 50, stdin); 
    *(arrs+i) = (char)malloc(sizeof(char) * strlen(x)); 
    strcpy((arrs+ i), x); 
} 
+3

ヒープバッファの終わりの後にメモリに書き込まないでください。 –

+3

* imは文字列へのポインタ配列を作成し、この問題が発生しました* 'char * arrs;'これはポインタ配列ではありません。それはポインタです。 – wildplasser

+3

本当に、このエラーは、あなたが** mallocの戻り値をキャストしていないと明らかです(http://stackoverflow.com/questions/605845/do-i-cast-the-result -of-malloc)。 –

答えて

0

arrs私のコードで間違ってはありanythingsですヒープバッファの終了後にメモリに書いたことを検出しました『charへのポインタ「ではなく、単によりも、』 char型へのポインタに:

char x[50]; 
int num = 0; 
int i = 0; 
char **arrs;       // <--- pointer to pointer 
printf("Enter number:"); 
scanf("%d", &num); 
arrs = malloc(sizeof (char *) * num); // <--- sizeof (char *) 
getchar(); 
for (i = 0; i < num; i++) 
{ 
    printf("Entered str number %d\n", i); 
    fgets(x, 50, stdin); 
    arrs[i] = malloc(strlen(x) + 1); // <--- +1 for the terminating '\0' 
    strcpy(arrs[i], x);     // <--- arrs[i] is a char * 
} 

// Do something 

for (i = 0; i < num; i++) 
{ 
    free(arrs[i]); 
} 
free(arrs); 
+0

私はこの問題が無料であることに気がつきました。ここにコードがありますが、ありがとうございます。 無料にする適切な方法は何ですか? – uSEwrasd

+0

@uSEwrasd回答が改善されました –

+0

何かの理由で\t の何かのために – DaV

0

問題は、あなたは文字の配列ではない文字列の配列にメモリを割り当てているで、これは文字のポインタです。ちょうど変更sizeof(char)によってsizeof(char *)