当我尝试cout a const char * [i]时,分段错误(核心转储),问题是什么?

时间:2016-06-17 10:03:59

标签: c++ segmentation-fault g++ coredump

g ++编译器说:

  

分段错误(核心转储)

此代码运行时:

#include <iostream>
using namespace std;

int main(){

const char *constantChars[3], *variableChars[3];
long int numbers[3];

for(int i=0; i<4; i++){
    constantChars[i] = "hello number: ";
    numbers[i] = i;
    variableChars[i] = (const char *) numbers[i];

    cout<<constantChars[i]<<variableChars[i]<<endl;
}

return 0;}

在我的for循环中cout<<variableChars[i]<<endl时崩溃。

2 个答案:

答案 0 :(得分:0)

变化:

variableChars[i] = (const char *) numbers[i];

为:

variableChars[i] = (const char *)(&numbers[i]);

答案 1 :(得分:0)

问题在于您声明的数组的长度。您已将长度设置为3,因此它应该用于从0到2的索引,而在程序中,您使用的索引从0到3。

只需将所有数组的长度增加到4,它就可以解决您的问题。

变化:

const char *constantChars[3], *variableChars[3];
long int numbers[3];

为:

const char *constantChars[4], *variableChars[4];
long int numbers[4];