Segmentation fault in C


 
Thread Tools Search this Thread
Top Forums Programming Segmentation fault in C
# 1  
Old 03-30-2011
Error Segmentation fault in C

i have this code
Code:
int already_there(char *client_names[], char *username) {
    int i;
    for(i = 0; i<NUM; i++) {
        printf("HERE\n");
        if (strcmp(client_names[i], username)==0) return(1);
    }
    return(0);
}

and i get a segmentation fault, whats wrong here?
# 2  
Old 03-30-2011
Well, assuming:
  1. NUM is the length of client_names
  2. all the client names entries are not null, pointers to valid addresses,
  3. every client name is null terminated,
  4. so is username (a valid pointer to a null terminated string)
then, nothing. Maybe test client_names[i] for null. Incidentally, argv is such an array of pointers to char arrays, and while main() provides argc, it is really derived by an extra argv entry at the end, a null pointer, as described in man 2 exec(). Sometimes, the null term is more reliable, like if NUM changes, as there is no Num needed. Stick in some fprintf(stderr,"%d: . . . ", __LINE__, . . .); lines and log what works, unbuffered.

Last edited by DGPickett; 03-30-2011 at 02:19 PM..
# 3  
Old 03-30-2011
nvm i fixed it all i had to do is

if (client_names[i]== username) return(1);
# 4  
Old 03-30-2011
Humm, you are not actually comparing strings here, all you are doing is comparing pointers. Not very robust.
# 5  
Old 03-30-2011
Quote:
Originally Posted by omega666
nvm i fixed it all i had to do is

if (client_names[i]== username) return(1);
Strings don't work that way. It's not crashing anymore, but it's not actually doing what you wanted either. It's just comparing the pointer, not the contents. Try this:

Code:
int main(void)
{
    char *str1="aaaa";
    char str2[]="aaaa";
    char *str3=str1;
    if(str1 == str2) printf("str1 == str2\n");
    if(str1 == str3) printf("str1 == str3\n");
}

It won't print the first one because str1 and str2 aren't equal. They point to different areas of memory. It will print the second one because str1 and str3 do point to the same area of memory.

As is often the case it's not something wrong with your function as much as something wrong with the data you fed into it. Something's wrong with the variables you passed into the function. Since you, as usual, didn't post the complete code, I'd need psychic powers to help you.

Please post your complete code!

Last edited by Corona688; 03-30-2011 at 03:11 PM..
# 6  
Old 03-30-2011
Quote:
Originally Posted by DGPickett
Well, assuming:
  1. NUM is the length of client_names
  2. all the client names entries are not null, pointers to valid addresses,
  3. every client name is null terminated,
  4. so is username (a valid pointer to a null terminated string)
then, nothing. Maybe test client_names[i] for null. Incidentally, argv is such an array of pointers to char arrays, and while main() provides argc, it is really derived by an extra argv entry at the end, a null pointer, as described in man 2 exec(). Sometimes, the null term is more reliable, like if NUM changes, as there is no Num needed. Stick in some fprintf(stderr,"%d: . . . ", __LINE__, . . .); lines and log what works, unbuffered.
i defined client_names like
char *client_names[NUM];
and only one element was defined
how do i set the ones i am not using to not null ?
# 7  
Old 03-30-2011
Do you not understand the meaning of "complete code"? I hope that's enough. Smilie

To set things to NULL, set them equal to NULL.
Code:
// Starting at one because zero has something in it
for(n=1; n<NUM; n++) { client_names[n]=NULL; }

...but that's not enough to stop crashes. NULLs aren't a warning for the computer -- they're a warning for you. The program must check if things are NULL before you use them.

Code:
int already_there(char *client_names[], char *username) {
    int i;
    for(i = 0; i<NUM; i++) {
        printf("HERE\n");
        // strcmp on NULL will crash
        if(client_names[i] != NULL)
        {
            if (strcmp(client_names[i], username)==0) return(1);
        }
    }
    return(0);
}

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Programming

C. To segmentation fault or not to segmentation fault, that is the question.

Oddities with gcc, 2.95.3 for the AMIGA and 4.2.1 for MY current OSX 10.14.1... I am creating a basic calculator for the AMIGA ADE *NIX emulator in C as it does not have one. Below are two very condensed snippets of which I have added the results inside the each code section. IMPORTANT!... (11 Replies)
Discussion started by: wisecracker
11 Replies

2. Homework & Coursework Questions

Segmentation Fault

this is a network programming code to run a rock paper scissors in a client and server. I completed it and it was working without any error. After I added the findWinner function to the server code it starts giving me segmentation fault. -the segmentation fault is fixed Current problem -Also... (3 Replies)
Discussion started by: femchi
3 Replies

3. Programming

Using gdb, ignore beginning segmentation fault until reproduce environment segmentation fault

I use a binary name (ie polo) it gets some parameter , so for debugging normally i do this : i wrote script for watchdog my app (polo) and check every second if it's not running then start it , the problem is , if my app , remain in state of segmentation fault for a while (ie 15 ... (6 Replies)
Discussion started by: pooyair
6 Replies

4. Programming

segmentation fault

Hi, I am having this segmentation fault not in the following program, bt. in my lab program . My lab program is horrible long so cannot post it here bt. I am using the following logic in my program which is giving the segmentation fault. Bt. if I run this sample program as it is it dosen't give... (3 Replies)
Discussion started by: mind@work
3 Replies

5. UNIX for Dummies Questions & Answers

Segmentation Fault

Hi, While comparing primary key data of two tables thr bteq script I am getting this Error. This script is a shell script. *** Error: The following error was encountered on the output file. Script.sh: 3043492 Segmentation fault(coredump) Please let me know how to get through it. ... (5 Replies)
Discussion started by: monika
5 Replies

6. Programming

Why not a segmentation fault??

Hi, Why I don't receive a segmentation fault in the following sample. int main(void) { char buff; sprintf(buff,"Hello world"); printf("%s\n",buff); } If I define a buffer of 10 elements and I'm trying to put inside it twelve elements, Should I receive a sigsev... (22 Replies)
Discussion started by: lagigliaivan
22 Replies

7. AIX

Segmentation fault

Hi , During execution a backup binary i get following error "Program error 11 (Segmentation fault), saving core file in '/usr/datatools" Riyaz (2 Replies)
Discussion started by: rshaikh
2 Replies

8. Programming

segmentation fault

ive written my code in C for implementation of a simple lexical analyser using singly linked list hence am making use of dynamic allocation,but when run in linux it gives a segmentation fault is it cause of the malloc function that ive made use of????any suggestions as to what i could do??? thank... (8 Replies)
Discussion started by: rockgal
8 Replies

9. Programming

Hi! segmentation fault

I have written a program which takes a directory as command line arguments and displays all the dir and files in it. I don't know why I have a problem with the /etc directory.It displays all the directories and files untill it reaches a sub directory called peers which is in /etc/ppp/peers.the... (4 Replies)
Discussion started by: vijlak
4 Replies

10. UNIX for Dummies Questions & Answers

Segmentation Fault

hello all, I tried a program on an array to intialise array elements from the standard input device.it is an integer array of 5 elements.but after entering the 4th element it throws a message called "Segmentation Fault" and returns to the command prompt without asking for the 5th element. ... (3 Replies)
Discussion started by: compbug
3 Replies
Login or Register to Ask a Question