为什么C++程序的运行结果为“分割故障(核心转储)”

问题描述:

#include <iostream> 
using namespace std; 
int main(){ 
    char* ch; 
    const char *c1 = "this is a goog book\n thingking in c++"; 
    const char *c2 = "python good book vs cpp"; 
    for(int i=0;i<50;i++) 
    ch[i]=c1[i]; 

    for(int j=0;j<50;j++) 
    ch[50+j]=c2[j]; 


    char* p1=(&ch[0]); 
    cout << "p1=" << p1 << endl; 
} 

编译代码在Ubuntu 12.04,能编译,但运行结果是“分段故障(核心转储)”为什么C++程序的运行结果为“分割故障(核心转储)”

+0

为'ch'分配一些内存。使用调试器会在那里指出你。 – 2014-09-01 07:05:34

+0

软件世界需要的技能#1:知道如何自己研究问题。 – 2014-09-01 07:06:24

+1

@JonathanReinhart将代码粘贴到您的本地众包调试服务 – 2014-09-01 07:08:46

你没有为ch分配空间。你或许可以把它固定大小的数组:

char ch[128]; 

,或者你可以从堆中分配它:

char *ch = new char[128]; 

(不要忘了delete它时,已完成)。

你可能要连接两个数组:

  1. 你没有为* CH分配空间。
  2. char *c1 = "Hello World";是已弃用的版本。如果你想连接两个数组假设每个的大小为50是不是一个好主意

    char c1[]="Hello World";

  3. :这应改为使用。你可以用函数计算出它的尺寸:strlen(c1);宣布下string.hcstring
  4. 目前已经可用的库函数char * strcat (char * destination, const char * source);其拷贝级联串入的第一个参数。 举例来看this