file-solaris下编译的程序执行是出现段错误

问题描述

solaris下编译的程序执行是出现段错误
编译器版本
Reading specs from /usr/sfw/lib/gcc/sparc-sun-solaris2.10/3.4.3/specs
Configured with: /sfw10/builds/build/sfw10-patch/usr/src/cmd/gcc/gcc-3.4.3/configure --prefix=/usr/sfw

--with-as=/usr/ccs/bin/as --without-gnu-as --with-ld=/usr/ccs/bin/ld --without-gnu-ld --enable-

languages=cc++ --enable-shared
Thread model: posix
gcc version 3.4.3 (csl-sol210-3_4-branch+sol_rpath)

test.h:
#include
#include
#include
#include
#include
#include
#include
#define MAX_DATE_STR_LEN 30
#define SECONDS_PER_DAY 3600 * 24
#define PATH_TOKEN ""/""
#define FILE_TYPE_DIR 0
#define FILE_TYPE_OTHER 1
#define FILE_TYPE_NORMAL_FILE 2
int const FILETYPECOUNT=6 ;
using namespace std;
using std::vector;
using std::string;
struct FileInfoSole{
string Name;
string Path;
string FullPath;
long FileId;
int Result;
int Reason;
string ReasonDesc;
int Type;
long Size;
string CreateTime;
string ErrFile;
string TmpErrFile;
string FileType;
};
typedef vector FileListSole;

test.cpp:
#include ""test.h""
using namespace std;
int GetFileListSole(string dir FileListSole &fileListstring substr int flag);
string tttypes[FILETYPECOUNT]={""CUST""USER""RED""HT""LT""MH""};
int main(){
string dir=""./so/"";
FileListSole fileList;
string substr;
GetFileListSole(dirfileListsubstr0);
return 0;
}
int GetFileListSole(string dir FileListSole &fileListstring substr int flag){
DIR *pDir = NULL;
if ( ( pDir = opendir(dir.c_str()) ) == NULL ){
return false;
}
int retCode = 0;
FileInfoSole fileInfoSole;
//int solearr[200];
cout<<""link sole""<<endl;
cout<<fileInfoSole.Name<<endl;
cout<<fileInfoSole.Name<<endl;
cout<<fileInfoSole.Name<<endl;
struct dirent entry;
struct dirent *result;
cout<<""4""<<fileInfoSole.Name<<endl;
//for( retCode = readdir_r( pDir &entry &result ); result != NULL && 0 == retCode; retCode =

readdir_r( pDir &entry &result ) )
retCode = readdir_r( pDir &entry &result );
for(int i=0 ;i< 4;i++)
{
retCode = readdir_r( pDir &entry &result );
cout<<""5""<<fileInfoSole.Name<<endl;//循环第一次时,程序在这个地方蹦会了,出现段错误,郁闷彻底,求大

侠帮助
if( strcmp( entry.d_name."" ) == 0 ||strcmp( entry.d_name.."") == 0)
{
continue;
}
cout<<""testa""<<endl;
cout<<fileInfoSole.Name<<endl;
cout<<""---""<<endl;
fileInfoSole.Name = entry.d_name;
// cout<<fileInfoSole.Name<<endl;
cout<<""testb""<<endl;
if (substr!="""")
{
if (fileInfoSole.Name.find(substr)==string::npos)
{
//printf(""%sn""fileInfoSole.Name.c_str());
continue;
}
else
{
//printf(""%sn""fileInfoSole.Name.c_str());
fileInfoSole.FileType=substr;
}
}else
{
fileInfoSole.FileType=string("""");
for(int k=0;k<FILETYPECOUNT;k++)
{
if (fileInfoSole.Name.find(tttypes[k])!=string::npos)
{
fileInfoSole.FileType=string(tttypes[k]);
break;
}
}
}
//printf(""%sn""fileInfoSole.Name.c_str());
fileInfoSole.Path = dir;
fileInfoSole.FullPath.clear();
fileInfoSole.FullPath.append(dir).append(PATH_TOKEN).append(entry.d_name);

        //GetFileInfo( fileInfoSole );         if ( FILE_TYPE_NORMAL_FILE == fileInfoSole.Type ){             //fileList.push_back(fileInfoSole);         }         if ( FILE_TYPE_DIR == fileInfoSole.Type )         {            if (flag)            {                GetFileListSole(fileInfoSole.FullPathfileListsubstr flag);            }         }}closedir(pDir);cout<<""over""<<endl;return true;

}

so文件夹:
-bash-3.2$ ls -l so
total 0
-rw-r--r-- 1 bill bill 0 Apr 10 18:30 fileiiiiiiiiiiiiii
执行程序:
-bash-3.2$ ./a.out
link sole

4
5
Segmentation Fault (core dumped)
-bash-3.2$
我就想问程序到cout<<""5""<<fileInfoSole.Name<<endl;个语句是报段错误,我猜测是系统调用导致的内存泄露,于是

我在程序
FileInfoSole fileInfoSole;和struct dirent entry; 之间放了一个int solearr[200];
数组,就不会出现段错误了或者把so文件夹下的文件""fileiiiiiiiiiiiiii""改成短一点的""file""的时就不会出现段错误

了,请问这是什么原因导致的,有什么更好的办法解决这个问题,越详细细越好,等代大神解决.....

时间: 2024-12-31 01:15:18

file-solaris下编译的程序执行是出现段错误的相关文章

mingw-Code::Blocks Windows环境下编译HelloWorld程序报错,求高手支招!

问题描述 Code::Blocks Windows环境下编译HelloWorld程序报错,求高手支招! 很简单的Hello World 程序,编译时提示: D:MinGWincludec++3.4.5bitscodecvt.h|475 这个文件中引用的 bits/codecvt_specializations.h 文件找不到 请问是哪里出了问题? ?

linux下用core和gdb查询出现&quot;段错误&quot;的地方【转】

转自:http://blog.chinaunix.net/uid-30091091-id-5754288.html 原文地址:linux下用core和gdb查询出现"段错误"的地方 作者:草根老师   有些时候我们在一段C代码的时候,由于对一个非法内存进行了操作,在程序运行的过程中,出现了"段错误".   呵呵,这种问题我想很多人会经常遇到.遇到这种问题是非常无语的,只是提示了"段错误",接着什么都没 有,如果我们一味的去看代码找太疼苦了,因为我

内存泄露-在Cortext-A8的板子上运行程序,malloc出现段错误

问题描述 在Cortext-A8的板子上运行程序,malloc出现段错误 PLNode Create_list_head() { PLNode head = NULL; //printf("size: %xn",sizeof(struct List_Node)); head = (PLNode)malloc(sizeof(LNode)); if(head == NULL) { goto Err1; } INIT_LIST_HEAD(&head->list); return

NetBeans6.7下编译Qt程序的问题

问题描述 Sun公司刚发布的NetBeans6.7支持Qt应用程序开发,下载后尝鲜时却无法编译成功,错误提示为:nbproject/qt-Debug.mk:83:***multipletargetpatterns.Stop.请帮忙分析并解决难题. 解决方案 解决方案二:NetBeans:java的?解决方案三:NetBeans不懂..去java版问问吧:)解决方案四:楼主去JAVA区问问吧.解决方案五:我也遇见了这个问题.发现qmake.exe生成的makefile好像有问题.如下:INCPAT

Linux下编译C文件的过程

  1.首先,写一个简单的C源文件:HelloWorld   #include <stdio.h>int main(){ printf("/nHello World!/n/n"); return 0;}     2.下面是调用gcc命令编译HelloWorld.c的过程: [root@localhost gcc_test]# ls -l total 4 -rw-r--r-- 1 root root 78 Sep 11 00:17 HelloWorld.c   // gcc的

《C程序设计新思维》一1.2 在Windows下编译C

1.2 在Windows下编译C 在多数系统中,C享有一个中心的.贵宾礼遇的地位,以至于所有其他工具都处于从属的地位:但是在Windows机器中,C语言却被奇怪地忽略了. 所以我不得不花点时间讨论如何来准备好一台Windows机器以便用来写C程序.如果你现在不需要在Windows机器上编程,你可以直接跳到"1.3库的路径". 这并非是针对Microsoft的,请不要用这样的角度来理解这一节.我无意去推测Microsoft的动机和商业战略.不过,如果你想在Windows机器上用C来工作,

Linux下调试段错误的方法[Segmentation Fault]--GDB

原文 1.段错误是什么? 段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况. A segmentation fault (often shortened to segfault) is a particular error condition that can occur during the operation of computer software. In short, a segmentation

Linux环境下段错误的产生原因及调试方法小结

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的"段错误"(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个

Linux环境下段错误的产生原因及调试方法小结_C 语言

最近在Linux环境下做C语言项目,由于是在一个原有项目基础之上进行二次开发,而且项目工程庞大复杂,出现了不少问题,其中遇到最多.花费时间最长的问题就是著名的"段错误"(Segmentation Fault).借此机会系统学习了一下,这里对Linux环境下的段错误做个小结,方便以后同类问题的排查与解决. 1. 段错误是什么 一句话来说,段错误是指访问的内存超出了系统给这个程序所设定的内存空间,例如访问了不存在的内存地址.访问了系统保护的内存地址.访问了只读的内存地址等等情况.这里贴一个