Sponsored Content
Top Forums Programming Segmentation fault when I pass a char pointer to a function in C. Post 303016194 by jose_spain on Saturday 21st of April 2018 09:21:16 AM
Old 04-21-2018
Segmentation fault when I pass a char pointer to a function in C.

I am passing a char* to the function "reverse" and when I execute it with gdb I get:

Program received signal SIGSEGV, Segmentation fault.
Code:
0x000000000040083b in reverse (s=0x400b2b "hello") at pointersExample.c:72
72        *q = *p;


Attached is the source code.

I do not understand why this error occurs.

Why "modifyStruct" and "modifyString" are working right, but "reverse" does not work?

SOURCE CODE:

Code:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>


struct book
{
  char* title;
  int   pages;
  float price;
};


void modifyInt (int *li)
{
  *li *= 2;
}


void modifyStruct (struct book* lb)
{
  char* newTitle = "The best book";

  free(lb->title);
  lb->title = malloc((strlen(newTitle) + 1) * sizeof(char));
  strcpy(lb->title, newTitle);

  lb->pages=350;
  lb->price=20.25;
}


void modifyString (char* lw)
{
  int i;
  int strLen = strlen(lw);

  for (i=0; i<strLen; i++)
    if( (*(lw+i) >= 97) && (*(lw+i) <= 122) )
      *(lw+i) -= 32; // Converts letters to upper case.
}


void reverse (char* s)
{
  char* aux;
  char* p;
  char* q;

  p = s;
  int len = strlen(s);
  aux = (char*) malloc ((len + 1) * sizeof(char));

  printf("s=%s\n", s);

  printf("strlen(s)=%d\n", len); 
  *(aux+len) = 0; // End string mark.
  len--; 
  while (*p != 0)
  {
    *(aux+len) = *p;
    len--;
    p++;
  }
  printf("aux=%s\n", aux);

  // Copy aux to s.
  p = aux;
  q = s;
  while (*p != 0)
  {
    *q = *p;
    p++;
    q++;
  }

  printf("aux=%s\n", aux);
  printf("s=%s\n", s);
}


int main()
{
  int iv = 10;
  struct book *mynewbook;
  int len;
  char* words1;
  char* initial_words = "hello_pleased_to_met_you" ;
  char* tmp = "hello";

  printf ("\niv = %d\n", iv);
  modifyInt(&iv);
  printf ("After calling modifyInt, iv = %d\n\n", iv);

  mynewbook = (struct book*)malloc (sizeof (struct book));
  if (mynewbook == NULL)
    return -1;

  len = strlen("Unknown"); 
  mynewbook->title = (char*) malloc ((len + 1) * sizeof(char));
  strcpy(mynewbook->title, "Unknown");
  mynewbook->pages=0;
  mynewbook->price=0.0;
  printf ("mynewbook: title = %s, pages=%d, price=%f\n",
           mynewbook->title, mynewbook->pages, mynewbook->price); 
  modifyStruct(mynewbook);
  printf ("After calling modifyStruct: mynewbook: title = %s, pages=%d, price=%f\n\n",
            mynewbook->title, mynewbook->pages, mynewbook->price); 

  len = strlen(initial_words); 
  words1 = (char*) malloc ((len + 1) * sizeof(char));
  strcpy(words1, initial_words);
  printf ("words1 = %s\n", words1);
  modifyString(words1);
  printf ("After calling modifyString: words1 = %s\n\n", words1);

  printf("tmp=%s\n" , tmp);
  reverse(tmp);
  printf("After calling reverse: tmp=%s\n\n" , tmp);

  return 0;
}

Moderator's Comments:
Mod Comment Please use code tags

Last edited by jim mcnamara; 04-21-2018 at 10:29 AM..
 

10 More Discussions You Might Find Interesting

1. AIX

Segmentation fault

I am tring to install Lotus Domino/Notes 5.0.5 on a AIX 4.3.3 server. I go to run the cdrom/ibmpow/install and I get the following error. Lotus Notes for Unix Install Program --------------------------------------------- ./install: 10088 Segmentation fault This had Lotus Notes installed... (1 Reply)
Discussion started by: jshaulis
1 Replies

2. Programming

Adding a single char to a char pointer.

Hello, I'm trying to write a method which will return the extension of a file given the file's name, e.g. test.txt should return txt. I'm using C so am limited to char pointers and arrays. Here is the code as I have it: char* getext(char *file) { char *extension; int i, j;... (5 Replies)
Discussion started by: pallak7
5 Replies

3. Programming

segmentation fault

If I do this. Assume struct life { char *nolife; } struct life **life; // malloc initialization & everything if(life->nolife == 0) Would I get error at life->nolife if it is equal to 0. wrong accession? (3 Replies)
Discussion started by: joey
3 Replies

4. Programming

pass a pointer-to-pointer, or return a pointer?

If one wants to get a start address of a array or a string or a block of memory via a function, there are at least two methods to achieve it: (1) one is to pass a pointer-to-pointer parameter, like: int my_malloc(int size, char **pmem) { *pmem=(char *)malloc(size); if(*pmem==NULL)... (11 Replies)
Discussion started by: aaronwong
11 Replies

5. Programming

segmentation fault in fwrite function

Hi, my code is written in proC and it is in UNIX(AIX).I have written a small code for writing data into a binary file,but while writing my program is giving core dump. Here Is my code---- fpWriteFile = fopen(WriteFileName,"wb+"); CHAR *recvgen; recvgen = (char... (7 Replies)
Discussion started by: ajaysahoo
7 Replies

6. Programming

C++ segmentation fault while checking for null pointer

void disptree(node *ptr) { if ((ptr->left) !=NULL) disptree(ptr->left); cout<<"Position:"<<ptr->pos<<" Data:"<<ptr->data<<endl; if ((ptr->right)!=NULL; disptree(ptr->right); } i'm getting a segmentation fault at the red line. i cannot understand what's the problem.... (3 Replies)
Discussion started by: vijaymrt
3 Replies

7. Programming

segmentation fault while returning from function.

I am working on the application in which I have to fetch values from the database and paste in url and send it to portal. table=get_result("SELECT serialno,cas,Mode,FLC,TLC,location,CompName,CompCode,FG,FC,DispNo,TruckNo,LWbill,RRGPN,INVNO,DCN,RQTY,DQTY,SQTY,DDATE,RDATE,SDATE,TTIME FROM... (1 Reply)
Discussion started by: er.rohan88
1 Replies

8. 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

9. Shell Programming and Scripting

Segmentation fault in function call, shell script

I am getting Segmentation fault at below function call in my script: get_x() { sqlplus -s / <<end | grep KEEP | sed 's/KEEP//;s///g' select 'KEEP' ,table_name from all_synonyms where upper(synonym_name)= '$1'; exit end x=$(get_x $1) echo " SQL OUTPUT IS :: $x" } I am getting output of... (1 Reply)
Discussion started by: IB_88
1 Replies

10. 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
All times are GMT -4. The time now is 08:36 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy