我的代码遇到了非常奇怪的行为,代码的基本流程是
io_loop.start()
解析文件并相应地设置全局变量,例如
main ()
现在,行后跟int frame_size, version;
typedef struct//file parsing variables
{
int frame,
int version; } configuration;
***//the function init_parse calls***
static int handler(void* user, const char* section, const char* name,
const char* value)
{
configuration* pconfig = (configuration*)user;
#define MATCH(s, n) strcmp(section, s) == 0 && strcmp(name, n) == 0
if (MATCH("protocol", "version")) {
pconfig->version = atoi(value);
}
else if (MATCH("basic", "frames")) {
pconfig->frames= atoi(value);
frame_size=pconfig->frames;
}
else {
return 0; /* unknown section/name, error */
}
return 1;
}
main (){
configuration config;
if (ini_parse("test.ini", handler, &config) < 0) {
printf("Can't load 'test.ini'\n");
getchar();
iret = pthread_create(&hThread,NULL, pcapreader, NULL);
if(iret)
{
fprintf(stderr,"Error - pthread_create() return code: %d\n",iret);
exit(EXIT_FAILURE);
}
}
的解析行,一切似乎都已设置,但是一旦线程启动,值frame_size就会变为6345720:/
我对可能的复制变量进行了双重检查。线程仅在for循环中使用main()
来检查限制。
答案 0 :(得分:1)
唯一的问题是初始化,一旦初始化,一切都像魅力一样:)
答案 1 :(得分:0)
我认为它可能永远不会初始化frame_size变量,也永远不会达到MATCH(“basic”,“frames”)语句。