C segmentation fault-char pointers

后端 未结 3 1974
孤城傲影
孤城傲影 2021-01-28 06:36

I need help figuring out why I am getting a segmentation fault here. I have gone over it and I think I am doing something wrong with the pointers, but I can figure out what.

相关标签:
3条回答
  • 2021-01-28 06:52

    That pointer a does not get the actual space where to store the data. You just declare the pointer, but pointing to where? You can assign memory this way:

    char *a = malloc(1);
    

    Then it won't segfault. You have to free the variable afterwards:

    free(a);
    

    But in this case, even better,

    char a = 'a';
    encript(&a);
    
    0 讨论(0)
  • 2021-01-28 06:55
    char* a;
    *a = 'a';
    /*SEGMENTATION FAULT HERE!*/
    

    There isn't any "there" there. You've declared a and left it uninitialized. Then you tried to use it as an address. You need to make a point to something.

    One example:

    char buffer[512];
    char *a = buffer;
    

    (Note buffer has a maximum size and when it falls out of scope you cannot reference any pointers to it.)

    Or dynamic memory:

    char *a = malloc(/* Some size... */);
    
    if (!a) { /* TODO: handle memory allocation failure */ }
    
    // todo - do something with a.
    
    free(a);
    
    0 讨论(0)
  • 2021-01-28 06:59

    The problem is here:

    char *a;
    *a = 'a'
    

    Since the variable "a" is not initialized, *a = 'a' is assigning to a random memory location.

    You could do something like this:

    char a[1];
    a[0] = 'a';
    encrypt(&a[0]);
    

    Or even just use a single character in your case:

    int main(){
      char a = 'a';
    
      encrypt(&a);
      printf("test:%c/n",a);
    
      return 0;
    };
    
    0 讨论(0)
提交回复
热议问题