Segmentation fault (core dumped)
下面这段代码, 从fd_r文件的内容接到outputfileFd文件(前面已经打开并写入部分内容)后面,现在是走到memcpy处就段错误,看样子像是p_w p_r指针不可操作,一操作就挂掉了。求指教,没看出代码有啥问题啊?
fd_r = open(infile, O_RDWR);
length_r = lseek(fd_r,0,SEEK_END);
filesizesum += length_r;
off_write = lseek(outputfileFd,0,SEEK_CUR);
lseek(fd_r,0,SEEK_SET);
while(1)
{
p_r = (char*)mmap(NULL,BUF_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
p_w = (char*)mmap(NULL,BUF_SIZE,PROT_WRITE,MAP_SHARED,outputfileFd,off_write);
memcpy(p_w,p_r,BUF_SIZE);
off += BUF_SIZE;
off_write += BUF_SIZE;
if((off+BUF_SIZE) >= length_r)
{
p_r = (char*)mmap(NULL,length_r - off ,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
p_w = (char*)mmap(NULL,length_r - off,PROT_WRITE,MAP_SHARED,outputfileFd,off_write);
memcpy(p_w,p_r,length_r -off );
munmap(p_r,length_r - off);
munmap(p_w,length_r - off);
break;
}
}
fd_r = open(infile, O_RDWR);
length_r = lseek(fd_r,0,SEEK_END);
filesizesum += length_r;
off_write = lseek(outputfileFd,0,SEEK_CUR);
lseek(fd_r,0,SEEK_SET);
while(1)
{
p_r = (char*)mmap(NULL,BUF_SIZE,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
p_w = (char*)mmap(NULL,BUF_SIZE,PROT_WRITE,MAP_SHARED,outputfileFd,off_write);
memcpy(p_w,p_r,BUF_SIZE);
off += BUF_SIZE;
off_write += BUF_SIZE;
if((off+BUF_SIZE) >= length_r)
{
p_r = (char*)mmap(NULL,length_r - off ,PROT_READ|PROT_WRITE,MAP_SHARED,fd_r,off);
p_w = (char*)mmap(NULL,length_r - off,PROT_WRITE,MAP_SHARED,outputfileFd,off_write);
memcpy(p_w,p_r,length_r -off );
munmap(p_r,length_r - off);
munmap(p_w,length_r - off);
break;
}
}
...全文
相关推荐
collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core d
], core dumped"。
Linux下如何使用gdb调试core文件
在Linux环境中,gdb(GNU Debugger)是一款强大的调试工具,用于检查和分析程序中的错误,尤其是在遇到Segmentation fault (core dumped)这样的运行时错误时。
利用core文件排查系统崩溃的信息详细步骤
生成 Core Dump 文件执行可执行程序直到出现 Segmentation fault (core dumped) 错误,表示 Core Dump 文件生成成功。
ARM版如何开启gdb调试.docx
/hellop= 0Segmentation fault (core dumped)```现在我们可以用GDB来调试这个Core文件。
Linux段错误解释[归类].pdf
在Linux操作系统中,段错误(Segmentation Fault)是一种常见的运行时错误,通常发生在程序试图访问其不应该访问的内存区域时。


