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

Hello,
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!):
Code:
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:
Code:
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  
Quote:
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.

Quote:
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
Code:
    for (j = 0; j < 23; j++) {

to
Code:
   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:
Code:
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:

Code:
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!
Code:
*str[]={......,
"......cagt",
"....acgatc"         //Here the comma was left out!
"...ggggcta",
"....acgcat"}
};

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:
Code:
#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