Segment fault related to strlen.S

Login or Register for Dates, Times and to Reply

Thread Tools Search this Thread
Top Forums Programming Segment fault related to strlen.S
# 1  
Segment fault related to strlen.S

This function was copied into my code, which was compiled without error/warning, but when executed there is always Segmentation fault at the end after the output (which seems correct!):
void get_hashes(unsigned int hash[],  unsigned char *in)
    unsigned char *str = in;
    int pos = strlen((char *) in);    //This line is of problem!
    hash[0] = RSHash(str, pos);
    hash[1] = DJBHash(str, pos);
    hash[2] = FNVHash(str, pos);
    hash[3] = JSHash(str, pos);
    hash[4] = PJWHash(str, pos);
    hash[5] = SDBMHash(str, pos);
    hash[6] = DEKHash(str, pos);
    hash[7] = murmur(str, (uint64_t) pos, (uint64_t) pos);

Then I used gdb to debug, and I got this message:
Program received signal SIGSEGV, Segmentation fault.
strlen () at ../sysdeps/x86_64/strlen.S:106
106    ../sysdeps/x86_64/strlen.S: No such file or directory.

The problem line has been highlighted. Code for the whole program is attached. I used type cast to suppress the warnings at compiling without full understanding.
Can someone explain the error for me, and show me the correct fix?
Thanks a lot!
# 2  
Originally Posted by yifangt
... I used type cast to suppress the warnings at compiling without full understanding.
Now you have some understanding of why you shouldn't use type casts to suppress warnings.

Can someone explain the error for me, and show me the correct fix?
Thanks a lot!
You're trying to take the length of a string - but it's not a string.
# 3  
Invalid loop count. Change
    for (j = 0; j < 23; j++) {

   for (j = 0; j < 22; j++) {

# 4  
Segmentation fault still there

Thanks achenle, you said it is not a string, but it seems the program has done what I expected except the "segmentation fault" error. Can you please show me the fix, if possible?
Murphy! I made the change, but the error still there!

Last edited by yifangt; 03-07-2016 at 01:07 PM..
# 5  
Follow up

Also I changed all the corresponding parameters from unsigned char to const char to have consistency and avoid typecasting:
void get_hashes(unsigned int hash[],  const char *in)
    int pos = strlen(in);            //causing Segmentation fault at end of run!
    hash[0] = RSHash(in, pos);
    hash[1] = DJBHash(in, pos);

but the problem is still the same. Anyone more clues, please?

Last edited by yifangt; 03-08-2016 at 12:04 PM..
# 6  
Running the code with Qt creator it seems limiting the bound in the outer loop:

for (j = 0; j < 22; j++)

allows the code to run with out any memory violation errors. This might be a clue to the problem ( not sure what the code does )..

Edit: Opps! when I change the outer loop bound to 22 the code seems to run without any memory access violations on Fedora 23 using g++ version: 5.3.1 20151207 . Not sure what the problem is on your end. I would find which loop indexes the program crashes for you and then trace the code from there using a debugger.

Last edited by cman; 03-07-2016 at 06:45 PM..
This User Gave Thanks to cman For This Post:
# 7  
Thanks cman!
Finally the problem was found to be the third last entry of my str[], for which the comma was missing!
"....acgatc"         //Here the comma was left out!

Each single string was 500 char long wrapped in two lines but concatenated with a "\n" in the middle. The missing comma make the third last string 1000 char long, which violated the macro definition:
#define WORD_BUF_SIZE 512

However, I'd like to know your way to debug I would find which loop indexes the program crashes for you!Thanks a lot!

Last edited by yifangt; 03-08-2016 at 04:50 PM.. Reason: typo
Login or Register for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #73
Difficulty: Easy
BSD (Berkeley Software Distribution) is an open-source, Unix-like operating system.
True or False?

10 More Discussions You Might Find Interesting

1. Programming

Segment fault for C++ program when return vector

I am trying to reverse complement DNA sequence (string) with a short c++ code using boost library. Code was compiled without any warning/error, but ran into Segmentation fault. My guess is the function to return a vector, but not sure. #include <iostream> #include <fstream> #include <string>... (14 Replies)
Discussion started by: yifangt
14 Replies

2. Programming

Segment-fault handling for pthreads

Hi I have struggling a week to fix a program , in the begining i got SIGBUS , but after many attempts still the program gets SIGSEGV segment fault , In bellow i post the seg fault log + source codes. would really appreciate if experts help me to fix this segment fault error. any advice is... (2 Replies)
Discussion started by: pooyair
2 Replies

3. Programming

why segment fault,

I always get segment fault, why? can sb help me and modify it, I have spend on much time on #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <sys/time.h> #include <string.h> #define MAX 10 pthread_t thread; void *thread1() { int *a; int i, n; ... (1 Reply)
Discussion started by: yanglei_fage
1 Replies

4. Programming

Data segment or Text segment

Hi, Whether the following piece of code is placed in the read-only memory of code (text) segment or data segment? char *a = "Hello"; I am getting two different answers while searching in google :( that's why the confusion is (7 Replies)
Discussion started by: royalibrahim
7 Replies

5. Programming

strlen for UTF-8

My OS (Debian) and gcc use the UTF-8 locale. This code says that the char size is 1 byte but the size of 'a' is really 4 bytes. int main(void) { setlocale(LC_ALL, "en_US.UTF-8"); printf("Char size: %i\nSize of char 'a': %i\nSize of Euro sign '': %i\nLength of Euro sign: %i\n",... (8 Replies)
Discussion started by: cyler
8 Replies

6. Programming

a strange segment fault about ltp-posix test

Hi all In the ltp-posix test,there is a case in open_posix_testsuite\conformance\interfaces\timer_gettime\speculative/6-1.c I run the above code,it will has a segment fault, if I modify it to below,it works well Anybody can tell me why? (1 Reply)
Discussion started by: yanglei_fage
1 Replies

7. Programming

'strlen' of a constant string

In a declaration, I have: const char comment_begin = "<!--"; const char comment_end = "-->"; const int comment_begin_len = strlen(comment_begin); const int comment_end_len = strlen(comment_end); When I compile, I get the warnings: emhttpc.c:64: warning: initializer element is not... (10 Replies)
Discussion started by: cleopard
10 Replies

8. Programming

Segment Fault

When run it, segment fault. What is wrong? #include <stdio.h> #include <stdlib.h> const int max =20; //**************************************************** // Input Matrix //**************************************************** void inMatrixAA(int *AA, int row, int col)... (9 Replies)
Discussion started by: zhshqzyc
9 Replies

9. Shell Programming and Scripting

Problem with the strlen function in ksh

Hello, Just a little problem with the ksh function : strlen I want to use this function in this little ksh program : while read line ; do TOTO=$line TOTONB=strlen($TOTO) echo $TOTONB (3 Replies)
Discussion started by: steiner
3 Replies

10. Programming

Problems with Strlen

hello, i have a problem with strlen. I have written this: for(y=13,z=0; cInBuf!=' ';y++) { cBuf=cInBuf; z++; } len = strlen(cBuf); out=len/2; fprintf(outfile,"F%i",out); If strlen is e.g. 22, it write F22. I want to write F2F2. How can i do this?... (5 Replies)
Discussion started by: ACeD
5 Replies

Featured Tech Videos