为什么这个错误? - 分段错误(核心转储)

时间:2018-03-20 18:17:56

标签: c++ macos

我的代码编译得很好。我正在运行并使用我连接的另一台服务器进行编译。当我运行它时,我收到的错误是 - 分段错误(核心转储)。当我在我的mac上本地编译和运行它时,它运行得很完美,只是当我使用levi(我们用来提交文件的虚拟机)时。我该怎么办才能得到这个错误信息并让我的代码运行?这是我的代码:

//
//  ChaseGraingerSection6.cpp
//
//  Created by Chase Grainger on 3/19/18.
//
// I typed all of this code on my own and did
// not copy any code from any outside sources.

#include <iostream>
#include <fstream>



int main() {

    const int my_dimension = 10; // dimension of 'my_array'
    std::string my_array[my_dimension]; // array of fixed amount of strings
    int x = 0; // used to add lines of text form 'word.txt' to 'my_array'
    int y = 0; // used when reversing array values
    int num_of_lines = 0; // keeps track of # of lines in text file[s]
    std::string text; // used when reading lines from 'word.txt'
    std::string my_reversed_array[num_of_lines]; // reversed order array

    std::ofstream outData; // output stream 'outData'
    std::ifstream inData; // input stream 'inData'

    inData.open("word.txt"); // opens input stream
    while (getline(inData, text)) { // runs through each line in 'word.txt'
        my_array[x] = text; // sets index value of array to line in text file
        num_of_lines += 1;
        x += 1;
    }
    inData.close(); // closes input stream

    // at this point, my_array has the text needed

    outData.open("chase.txt");

    for (x = num_of_lines - 1; x >= 0; x--) { // assisngs values in reverse order from one array to another
        my_reversed_array[x] = my_array[y];
        y += 1;
    }
    for (x = 0; x <= num_of_lines - 1; x++) {
        outData << my_reversed_array[x] << std::endl;
    }

    outData.close();
}

1 个答案:

答案 0 :(得分:7)

int num_of_lines = 0;
std::string my_reversed_array[num_of_lines];

这实际上不是有效的C ++,但是在支持可变长度数组作为扩展的编译器上,这将创建一个零大小的数组。

现在,无论你使用哪种编译器,如果你改变num_of_lines,这个数组以后就不会神奇地改变大小。那艘船已经航行了。

因此,无论何时写入my_reversed_array,您都会写入不属于您的记忆。

您将需要动态分配(或std::vector)以便您可以创建具有运行时边界的数组 - 并且在您知道这些边界之前不要这样做。

要回答你的下一个问题(为什么这不会在你的Mac上崩溃),你就得到了[不幸运]。该程序不是必需崩溃;它的行为是不确定的。相反,它可以召集一个出色的天才来回答你关于Stack Overflow的问题。哦......等等......;)