質問内容
入力文字数制限なしで文字を入力していくプログラムを作っています。
デバックなしで実行で、文字列中に数値以外が含まれる入力を3,4回繰り返すと全く動かなくなりました。
どこで止まったのか調べたところ29行目のrealloc(number, i + 2);で止まってました。
ちなみにデバックで実行したところ問題なく動作しました。
realloc関数、malloc関数、free関数は使ったことがなく、何がおかしいのかもわかりません。
このプログラムをどう書き直したらエラーや停止状態にならなくできるのか教えてください。
※CheckNumber関数は省略しています。
該当のソースコード
C言語
1#include <stdio.h> 2#include <stdlib.h> 3 4int CheckNumber(char *); // 文字列に数字だけが含まれている時に1を返す。それ以外は0。 5 6void main() 7{ 8 char *number = 0; 9 char c = 0; 10 int jdg = 0; 11 int i = 0; 12 13 while (jdg != 1) 14 { 15 printf("数値を入力してください。\n"); 16 printf("> "); 17 18 number = (char *)malloc(1); 19 jdg = 0; 20 i = 0; 21 22 while (1) 23 { 24 c = getchar(); 25 26 if (c != '\n') 27 { 28 *(number + i) = c; 29 realloc(number, i + 2); //ここで止まってました 30 i++; 31 } 32 else 33 { 34 *(number + i) = '\0'; 35 break; 36 } 37 } 38 39 if (*(number + 0) != '\0') 40 { 41 jdg = CheckNumber(number); 42 if (jdg == 0) 43 { 44 printf("\n数値以外が入力されています。\n"); 45 free(number); 46 } 47 } 48 else 49 { 50 printf("\n数字を入力されていません。\n"); 51 free(number); 52 } 53 } 54 55 printf("入力された数字は %s です。\n", number); 56 free(number); 57}
エラーメッセージ
Expression:_CrtlsValidHeapPointer(block) ※エラーメッセージの有無は環境によって異なるようで、エラーメッセージが出るものと出ないものがあるようです。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/22 14:39
2018/08/22 14:46
2018/08/22 14:49
2018/08/22 14:50
2018/08/22 15:04