0
我收到了总线错误。总线错误。无法访问内存
在调试下面的代码片段,并加强对writeDmpFile结束我越来越:
writeDmpFile (tree=0x56a310, filename=0x7fffffffd450 "20140318.221058") at unzipper_m1.c:146
146 }
(gdb) n
Cannot access memory at address 0x38353031323236
该文件虽然写的,但程序与总线错误结束。 下面的代码:
typedef struct dmpParams_t
{
char buff[6000000];
size_t *size;
}dmpParams_t;
int writeFile(char *name, unsigned char *buff, size_t *size,const char *dir)
{
FILE * pFile;
chdir (dir);
pFile = fopen (name, "wb");
fwrite (buff , sizeof(unsigned char), *size, pFile);
fclose (pFile);
return 1;
}
int writeDmpFile(GTree *tree, char *filename)
{
char dmpfilename[32];
dmpfilename[0] ='\0';
dmpParams_t params;
params.buff[0] ='\0';
size_t size =0;
params.size=&size ;
g_tree_foreach(tree, (GTraverseFunc)writeDmpFileLine, ¶ms);
sprintf (dmpfilename, "InstrumentList_FULL.csv_%.*s", 15, filename);
writeFile(dmpfilename, (unsigned char *)params.buff, &size , dmpdir);//(size_t *)params.size, dmpdir);
}
这不是“所有的代码”。这些函数如何被调用? “无法访问”的内存位置是_clearly_指向不在大多数内存映射中的位置 - 除非您拥有1600万GB的RAM ... – Floris
是的,但是地址必须在提供的部分中被覆盖。 – MaMu
'char buff [6000000];'大约6MB,这对于很多系统中的堆栈来说太多了。使用'malloc'来分配这个数组......或者使用一个更小的数组。 – ouah