LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   My program is seg faulting? (https://www.linuxquestions.org/questions/programming-9/my-program-is-seg-faulting-31849/)

eggs 10-03-2002 09:39 PM

My program is seg faulting?
 
Hey guys... I'm trying to right this program to read basic info from /proc files and display it on the screen. The problem is it seg faults and I don't know why :\

Quote:

#include <stdio.h>
#include <stdlib.h>

void cpu( void )
{
char item[50];
FILE *cfPtr;
if( ( cfPtr = fopen( "/proc/cpuinfo", "r" ) ) == NULL ){ printf( "Error, make sure /proc fs is mounted\n" ); }
else{
printf( "\n" );
while( !feof( cfPtr ) ){
fgets( item, 100, cfPtr );
if( item[0] == 'v' && item[1] == 'e' && item[2] == 'n' && item[3] == 'd' ){
printf( "%s", item );
}
if( item[0] == 'm' && item[1] == 'o' && item[2] == 'd' && item[3] == 'e' && item[4] == 'l' && item[6] == 'n' ){
printf( "%s", item );
}
}
fclose( cfPtr );
}
}

void ver( void )
{
char item[50];
FILE *cfPtr;
if( ( cfPtr = fopen( "/proc/version", "r" ) ) == NULL ){ printf( "Error, make sure /proc fs is mounted\n" ); }
else{
while( !feof( cfPtr ) ){
fgets( item, 100, cfPtr );
printf( "%s", item );
}
}
fclose( cfPtr );
}

void up( void )
{
char item[50];
FILE *cfPtr;
if( ( cfPtr = fopen( "/proc/uptime", "r" ) ) == NULL ){ printf( "Error, make sure /proc fs is mounted\n" ); }
else{
while( !feof( cfPtr ) ){
fgets( item, 100, cfPtr );
printf( "%s", item );
}
}
fclose( cfPtr );
}

int main( void )
{
printf( "CPU data: " );
cpu();
printf( "\n" );
printf( "Kernel Version: " );
ver();
printf( "\n" );
printf( "Uptime: " );
up();

return 0;
}

It seg faults somewhere between printing the cpu model and printing the new line in main. If I comment out cpu(); so it doesn't run it segfaults at the end of up(); but ver(); seems to run fine

akohlsmith 10-03-2002 10:36 PM

char item[50];
fgets( item, 100, cfPtr );

Sorry but this doesn't work. You've only allocated space for 49 characters and then you're allowing up to 100 to be stuffed there. Guaranteed segfault territory.

Either use properly-sized arrays or malloc() enough memory for the task. C doesn't have on-the-fly memory compression yet :-)

You may also want to try the various strcmp/strstr functions instead of going char by char.

eggs 10-06-2002 02:32 AM

Thanks, knew it would be something stupid :\


All times are GMT -5. The time now is 02:33 AM.