2016-10-16 19 views
-2

問題が発生しましたmalloc()、何が起こっているのか分かりません。私はMinGWでコンパイルしています。Malloc関数が正常に動作しない

Cadenaはchar *の場合はtypedefleer_dato()の場合は文字列を返す関数です。

Cadena leer_con_formato(const char * formato) 
{ 
    int i = 0; 
    Cadena dato = leer_dato(); 
    if (strlen(dato) != strlen(formato)) 
     return NULL; 
    char * nuevo_dato = (char *)malloc(strlen(dato)); // Here's the problem 
    if (!nuevo_dato) 
     return NULL; 
    while (dato[i] != '\0') 
    { 
     switch (formato[i]) 
    { 
     case '0': 
      if (!isdigit(dato[i])) 
       return NULL; 
      nuevo_dato[i] = dato[i]; 
      i++; 
      break; 
     case 'C': 
      if (!isalpha(dato[i])) 
       return NULL; 
      nuevo_dato[i] = dato[i]; 
      i++; 
      break; 
     case 33 ... 47: 
     case 58 ... 64: 
     case 91 ... 96: 
     case 123 ... 126: 
      if (!ispunct(dato[i])) 
       return NULL; 
      nuevo_dato[i] = dato[i]; 
      i++; 
      break; 
     default: 
      return NULL; 
    } 
} 
nuevo_dato[i] = NULO; 
return nuevo_dato; 
} 
+2

「問題が発生しています」 「問題」とは何か?あなたが観察していることを教えてもらえないと思いませんか?そして、[mcve]を提供してください。不完全なコードをデバッグすることはできません(例えば、 'leer_dato'は何をしますか?)。 – kaylum

+2

だから問題は何ですか?あなたは何を期待し、実際に何が起こりますか? –

+1

'malloc(strlen(dato));' - > 'malloc(strlen(dato)+ 1);' – chux

答えて

0

十分なメモリが割り当てられていません。 strlenがたとえばを返した場合、その文字列には、0バイトの終了文字については+ 1の5文字が含まれていることを意味します。文字列用のメモリを割り当てるときだから、そうのようにそれを行う必要があるでしょう:

char * nuevo_dato = (char*)malloc(sizeof(char) * (strlen(dato) + 1)); 

sizeof(char)はオプションです。

+1

注:'(char *) 'もキャストする必要はありません。 – chux

関連する問題