C分段fault-char指针

我需要帮助找出我在这里遇到分段错误的原因。 我已经过去了,我认为我的指针做错了,但我可以搞清楚是什么。

我的计划:

#include  #include  void encrypt(char* c); //characters are shifted by 175 int main(){ char* a; *a = 'a'; /*SEGMENTATION FAULT HERE!*/ encrypt(a); printf("test:%c/n",*a); return 0; }; void encrypt(char* c){ char* result; int i=(int)(*c); i+=175; if(i>255) { i-=256; } *c=(char)i; }; 

问题出在这里:

 char *a; *a = 'a' 

由于变量“a”未初始化,* a =’a’分配给随机存储器位置。

你可以这样做:

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

或者甚至只在你的情况下使用一个字符:

 int main(){ char a = 'a'; encrypt(&a); printf("test:%c/n",a); return 0; }; 
 char* a; *a = 'a'; /*SEGMENTATION FAULT HERE!*/ 

那里没有“那里”。 你声明a并且没有初始化它。 然后你试着用它作为地址。 你需要指出一些事情。

一个例子:

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

(注意buffer具有最大大小,当它超出范围时,您无法引用任何指针。)

或动态记忆:

 char *a = malloc(/* Some size... */); if (!a) { /* TODO: handle memory allocation failure */ } // todo - do something with a. free(a); 

指针a没有获得存储数据的实际空间。 你只是声明指针,但指向哪里? 你可以这样分配内存:

 char *a = malloc(1); 

然后它不会段错误。 之后你必须释放变量:

 free(a); 

但在这种情况下,甚至更好,

 char a = 'a'; encript(&a);