Ошибка шины при попытке записи в ФАЙЛ - PullRequest
0 голосов
/ 05 мая 2011

Я пытаюсь сгенерировать матрицу из всех единиц в C ++, используя двумерный массив, однако у меня появляется ОШИБКА ШИНЫ, когда я пытаюсь написать более 735 символов, я думаю, что у меня есть проблемы с выделением памяти, не могли бы вы помочь мне, пожалуйста

#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;

#define symbols 800

int main ()

{

    fstream file("/Users/Caste/Documents/MAESTRIA/PROGRAMMING TEST/CAPACITY/test1.txt",ios::out);

    int *ptr;
    ptr =(int*)calloc(symbols, sizeof(symbols));
    int i,j,array[1][symbols];
    for (i=0; i<1; i++)
    {
        for (j=0; j<symbols; j++) 
            array[1][symbols]=1;
    }
    cout << "Array indicates:\n";
    for (i=0; i<1; i++) {
        for (j=0; j<symbols; j++) 

            file<<array[1][symbols];
            file.close();

        cout << "\n";
        }

Ответы [ 6 ]

3 голосов
/ 05 мая 2011

Возможно, есть и другие ошибки, но для начала вы используя array[1] (второй элемент), когда array имеет только один элемент (типа int[symbols]). Неопределенное поведение и так как вы пишете, вы, конечно, портите другие объекты в стеке.

calloc выглядит более чем немного странно; это в первый раз я видел размер элемента, указанный с помощью sizeof постоянная. В этом случае константа имеет тип int, и Вы выделяете на int*, так что, возможно, вам повезло. Но std::vector<int> показалось бы более уместным.

И, конечно, вы закрываете файл после первой записи, Это означает, что все последующие записи будут бездействующими.

1 голос
/ 06 мая 2011

Спасибо, ребята, за вашу помощь, это было очень полезно, здесь я публикую окончательный код, который я уменьшаю:

1 голос
/ 05 мая 2011

В ваших циклах вы обращаетесь к массиву через константы, используемые для его объявления:

array[1][symbols]

Вы должны использовать переменные вашего цикла:

array[i][j]
0 голосов
/ 05 мая 2011

Если вы просто хотите записать группу «1» в файл, почему бы не написать что-то вроде:

std::ofstream file("whatever path");

std::fill_n(std::ostream_iterator<int>(file), how_many, 1);

Редактировать: чтобы сначала поместить данные в вектор, а затем скопировать в файл, вы можете сделать что-то вроде этого:

std::vector<int> data;

std::fill_n(std::back_inserter(data), how_many, 1);

и скопировать его в файл, вы должны сделать что-то вроде:

std::copy(data.begin(), data.end(), std::ostream_iterator<int>(file));
0 голосов
/ 05 мая 2011

В вашей программе много логических ошибок, но я считаю, что проблема, вызывающая сбой, заключается в том, что вы закрываете файл во вложенном цикле и затем пытаетесь записать в него.

0 голосов
/ 05 мая 2011

ptr =(int*)calloc(symbols, sizeof(symbols));должно бытьptr =(int*)calloc(symbols, sizeof(int));

Я не уверен, что это напрямую связано с вашей проблемой.

...