現在、複数の文字列をendが入力されるまで入力して、辞書順にソートするプログラムを作っています。条件として1つ文字列につき15文字以内で行数はあらかじめ指定することはできません。
自分はreallocでメモリを再確保しようと考えたのですが、実行すると、
./sort
Input words
dfa
fdsf
dfsdf
dsfsfd
*** Error in `./sort': realloc(): invalid next size: 0x0000000000b19010 ***
というメッセージが出てしまいます。
今回のような2次配列の行成分に対して、reallocではメモリの再確保はできないのでしょうか?
また解決方法は何かあるのでしょうか?
よろしくお願いいたします。
#include <stdio.h> #include <stdlib.h> #include <string.h> #define LEN 16 int main(void) { int i, j; char **str, cp[LEN]; int n = 0; printf("Input words\n"); str = (char **)malloc( 1 * sizeof(char *)); do { str[n] = (char *)malloc( LEN * sizeof(char) ); scanf("%s", str[n]); if ( strcmp(str[n], "end") == 0 ) { break; } str = (char **)realloc( str, 1 * sizeof(char *) ); ++n; } while (1); for(i=1;i<n-1;i++) { for(j=1;j<n-1;j++) { if(strcmp(str[j-1], str[j])>0) { strcpy(cp, str[j-1]); strcpy(str[j-1], str[j]); strcpy(str[j], cp); } } } printf("\n"); for(i=0; i<n-1; i++) { printf("%s\n", str[i]); } return 0; }
回答1件
あなたの回答
tips
プレビュー