私のプログラムは、値を使用して構成ファイルから読み取りlibconfig、グローバル構造体に値を保存します。正常に動作していますが、valgrind はエラーがあると言います。また、エラーはcharポインター変数に対してのみ表示されます。そのエラーは何ですか?それを修正する方法は? ありがとうございました
#include <stdio.h>
#include <libconfig.h>
#include "stdlib.h"
#define conf_file "myconf"
struct setting_data
{
int number;
const char* timeformat;
};
struct setting_data conf_data;
void read_config();
int main(){
read_config();
printf("%d @ %p\n", conf_data.number,&conf_data.number);
printf("%s @ %p\n", conf_data.timeformat,&conf_data.timeformat);
}
void read_config(){
config_t cfg;
// config_setting_t *rules, *settings,*m_number,*device,*sendduration,*pin_code;
config_init(&cfg);
if(! config_read_file(&cfg, conf_file))
{
fprintf(stderr, "%s:%d - %s\n", config_error_file(&cfg),
config_error_line(&cfg), config_error_text(&cfg));
config_destroy(&cfg);
exit(1);
}
// conf_data.number = config_setting_get_int (config_lookup(&cfg, "number" ));
config_lookup_int(&cfg,"number",&conf_data.number);
config_lookup_string(&cfg, "timeformat", &conf_data.timeformat);
config_destroy(&cfg);
}
==8238== サイズ 1 の無効な読み取り
==8238== 0x50AFBC9: _IO_file_xsputn@@GLIBC_2.2.5 (fileops.c:1317)
==8238== by 0x5083972: vfprintf (vfprintf.c:1629)
==8238== by 0x508C269: printf (printf.c:35)
==8238== by 0x400993: メイン (test.c:16)
....
==8238== アドレス 0x53cdb0c は、解放されたサイズ 15 のブロック内の 12 バイトです
==8238== エラーの概要: 5 つのコンテキストから 43 個のエラー (抑制: 4 個から 4 個)