2017-05-25 9 views
-1

私のプログラムに助けを借りることができます 文章中のアナグラムの数を数えているプログラムを書きました。これはmalloc()関数を使っています。私のコード**ArrPtr=mallocを参照してください。私のプログラムがクラッシュするフリー関数でメモリを解放する

私は、アナグラムをカウントするためにこれを使用することを終えた後、私はプログラムの私の第二の部分に続けていきたいと私は、私はしなかったとき(それはクラッシュしませんでしたfree(arrPtr); とプログラムがクラッシュしてメモリを解放したいです無料のオプションを使用してください)。

はここ

void main() 
{ 
    char str[1001] = { 0 }; 
    char temp[1001] = { 0 }, temp2; 
    char strB[1001] = { 0 }; 
    int printf_i, counter, i, q, flag, j = 1, r = 0, m = 1, length = 0, root = 0, m1 = 0; 
    int max_analogy = 0, counter2 = 0, O, sum, sum2; 
    char **arrPtr; 
    int k = 0; 
    int **matrix; 

    printf("Please enter the sentence, and then press Enter:\n"); 
    gets(str); 

    //bubble sort 
    strcpy_s(strB, 1001, str); 
    for (i = 0; i < strlen(strB); i = q + 2) 
    { 
     do 
     { 
      flag = 0; 
      for (q = i; strB[q + 1] != 32 && strB[q + 1] != 0; q++) 
      { 
       if (strB[q] > strB[q + 1]) 
       { 
        // Swap 
        temp2 = strB[q]; 
        strB[q] = strB[q + 1]; 
        strB[q + 1] = temp2; 
        flag = 1; 
       } 
      } 
     } while (flag != 0); 
    } 
    counter = 1; 
    length = strlen(strB); 

    for (i = 0; strB[i] != 0; i++) 
    { 
     if (strB[i] == 32) 
     { 
      strB[i] = 0; 
      counter++; 
     } 
    } 

    arrPtr = (char*)malloc(sizeof(char)*counter); 
    arrPtr[0] = strB; 
    q = 1; 
    for (i = 0; i < length - 1; i++) 
    { 
     if (strB[i] == 0) 
     { 
      arrPtr[q] = &strB[i + 1]; 
      q++; 
     } 
    } 

    counter2 = 0; 
    for (i = 0; i < counter; i++) 
    { 
     for (q = i + 1; q < counter; q++) 
     { 
      if (arrPtr[q] == 0 || arrPtr[i] == 0) 
       continue; 
      if (!strcmp(arrPtr[q], arrPtr[i])) 
      { 
       counter2++; 
       arrPtr[q] = 0; 
      } 
     } 
     if (max_analogy < counter2) 
      max_analogy = counter2; 
     counter2 = 0; 
    } 
    printf("The maximum number of anagram words in this sentence is %d.\n", max_analogy); 

    free(arrPtr); 
} 
+0

を使用して、それを修正することができます。 – Rohan

答えて

1
arrPtr = (char*)malloc(sizeof(char)*counter); 

、私のコードです多くの理由foが間違っている:

  1. arrPtr(char **)です。
  2. Cコンパイラを使用したキャストは無意味で危険です。
  3. あなたはsizeof(char *)

理由3を割り当てなければならない問題があなたの本当の理由である:あなたがcounter*sizeof(char *)(おそらくcounter*8)を書きながら、あなたはcounterバイトを割り当てているので、あなたはmallocを破壊割り当てられたメモリの境界外に書いていますメモリプール。


あなたは `arrPtr`に割り当てられた以上のことを書いている

arrPtr = malloc(sizeof(char *)*counter); 
関連する問題