Welcome to the Linux Foundation Forum!
Segmentation fault
Hi,
I am learning C. I got segmentation fault when I ran the below program.
[[email protected] ~]# more segmentationfault.c
#include
#include
int main()
{
char *mystr="Hi";
strcpy(mystr,"new value") ;
puts(mystr);
return 0;
}
[[email protected] ~]# ./a.out
Segmentation fault
[[email protected] ~]#
Could you please tell me the ways to debug the segmentation fault errors.
0
Comments
printf( "1" );
char *mystr="Hi";
printf( "2" );
strcpy(mystr,"new value" ;
printf( "3" );
puts(mystr);
printf( "4" );
return 0;
I added printf statements and it is throwing error at strcpy.
[[email protected]~]# more seg1.c
#include<stdio.h>
#include<string.h>
int main()
{
char *mystr="hi";
printf("1\n");
printf("2\n");
printf("3\n");
strcpy(mystr,"new value");
printf("4\n");
puts(mystr);
return 0;
}
[[email protected]~]# gcc -g seg1.c -o seg1
[[email protected]~]# ./seg1
1
2
3
Segmentation fault
[[email protected]~]#
I debug this using core file. It is also showing the error at strcpy
[[email protected]~]# gdb ./seg1 ./core.3121
GNU gdb Red Hat Linux (6.5-16.el5rh)
Copyright (C) 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux-gnu"...Using host libthread_db library "/lib/libthread_db.so.1".
warning: Can't read pathname for load map: Input/output error.
Reading symbols from /lib/libc.so.6...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/ld-linux.so.2...done.
Loaded symbols for /lib/ld-linux.so.2
Core was generated by `./seg1'.
Program terminated with signal 11, Segmentation fault.
#0 0x08048393 in main () at seg1.c:9
9 strcpy(mystr,"new value");
(gdb)
Still I have one dought here. I assigned the value to mystr at the time of initialization so memory will be allocated for the mystr. Then why once again i need to assign space for mystr.