以下のコードブロックがあり、不要な部分をすべて削除し、問題のある部分を残しました。関数ごとに必要な特定の形式(YYYYMMDDHHmm)で時間を取得するという私の目的fetch_time
。するためにreturn char array
、 を使用しmalloc
ました。ただし、以下のコードを 1 分ほど実行すると、プログラムがクラッシュします。デバッグ ツールでコードの実行時間を監視すると、p1 が指すメモリ位置が増加します。たとえば、最初の反復では 0x72120、2 回目の反復では 0x72150 などです。したがって、メモリの問題が原因で失敗したと思われます。どうすれば問題を解決できますか?
ところで、グローバル char 配列を定義し、サブ関数で時間情報を代入することで問題を解決できると思います。mallocの使い方の間違いとその解決方法を教えていただきたいです。ありがとうございました。
int main(int argc,char *argv[]){
char timedate2[13];
char *p1 = malloc(strlen(timedate2)+1);
if(!p1){exit(1);}
while(1){
p1=fetch_time();
}
}
char *fetch_time() {
char *p;
time_t rawtime;
struct tm * timeinfo;
char buffer [13];
time ( &rawtime );
timeinfo = localtime ( &rawtime );
strftime (buffer,13,"%04Y%02m%02d%02k%02M",timeinfo);
p = (char *)malloc(sizeof(buffer));
strcpy(p, buffer);
return p;
}