请问段错误是什么错误啊

dragonQ 2004-04-03 08:26:32
我声明了一个类的对象,然后用这个对象来调用该类的一个成员函数,编译通过,但运行时提示段错误; 当我声明一个该类的指针,并用这个指针来调用成员函数时,会正确输出,但在输出完毕后提示段错误.
用gdb调试过程中提示如下:
Program received signal SIGSEGV, Segmentation fault.
0x4000c6a0 in _dl_fini () from /lib/ld-linux.so.2
...全文
41 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
CoolQ 2004-04-04
  • 打赏
  • 举报
回复
char* value;
int index = 0;
while( index < 4 )
*( value + ( index++ ) ) = index;
你的Value的指针没有分配空间。
应该是
char *value;
value = calloc(5* sizeof(char));
...
...
dragonQ 2004-04-04
  • 打赏
  • 举报
回复
但是如果程序写成这样就是正确的
char* value="1234";
int test;
sscanf( value, "%d", &test );
printf( "%d", test );
这二者有什么区别吗?
dragonQ 2004-04-04
  • 打赏
  • 举报
回复
我想错误应该是在于在往外读value指针所指的数据时,即使到了'\0',他也会继续向下读,
所以导致段错误,那么应该如何控制让他只转换'\0'前的数据呢?
我原以为加上'\0'作为字符串的结尾,程序读到这里便会结束,事实并非如此!
dragonQ 2004-04-04
  • 打赏
  • 举报
回复
谢谢,麻烦你看一下下面这段代码错在哪里了?估计问题就在这里
char* value;
int index = 0;
while( index < 4 )
*( value + ( index++ ) ) = index;
*( value + index )='\0';
int test;
sscanf( value, "%d", &test );
printf( "%d", test );
ark13 2004-04-04
  • 打赏
  • 举报
回复
错误不在这段程序里,应该是某缓冲的生命周期错误,程序析构对象时试图delete不存在的内存
benbensan 2004-04-04
  • 打赏
  • 举报
回复
dragonQ(红河) 说得对
严重要求重新学习指针部分
指针没有分配内存就用会死的很难看的

cvsuser 2004-04-04
  • 打赏
  • 举报
回复
循环的索引知道3,没到结尾啊,
while( index < 4 )
*( value + ( index++ ) ) = index;

改成
while( index < 4 )
*( value + ( index++ ) ) = index;
再试呢
dragonQ 2004-04-04
  • 打赏
  • 举报
回复
char* value;
value = (char*) calloc( 5, sizeof( char ) );
int index = 0;
while( index < 4 )
*( value + ( index++ ) ) = index;
*( value + index )='\0';
int test;
sscanf( value, "%d", &test);
free(value);
printf("%d",test);

输出的为什么不是1234,而是134513838
cvsuser 2004-04-03
  • 打赏
  • 举报
回复
关注
dragonQ 2004-04-03
  • 打赏
  • 举报
回复
上面有两行打错了
float value1 = cpuinfo.sysCPUInfo();
float value2 = cpuinfo.usrCPUInfo();
应该是
float value1 = testinfo.testInfo1();
float value2 = testinfo.testInfo2();
dragonQ 2004-04-03
  • 打赏
  • 举报
回复
代码好长,我给说一下吧
int main ( void ){
TestInfo testinfo( "./test" );//"./test"为一个文件名
float value1 = cpuinfo.sysCPUInfo();
float value2 = cpuinfo.usrCPUInfo();
printf("%f,%f",value1,value2);
}

float TestInfo::testInfo1(){
char* info = _info->getInfo( 5, 3 );//_info 为成员变量,type:Information*
float value;
sscanf( info, "%f", &value);//将info所指的字符串转换为float型
return value;
}
float TestInfo::testInfo2(){
char* info = _info->getInfo( 5, 5 );
float value;
sscanf( info, "%f", &value);
return value;
}

char* Information::getInfo( int linenum, int strnum ){
//此函数为打开一文件取出linenum行,strnum位置的字符串
//返回值是一个指向该字符串的指针
}
rexp 2004-04-03
  • 打赏
  • 举报
回复
把你的代码帖出来吧。

23,115

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧