2016-02-08 8 views
-3

Это возвращает ошибку сегментации 11, я не могу понять, что вызывает ошибку.C++ Ошибка сегментации 11

Код не выдает ошибку до тех пор, пока он не попытается вывести Red Blue Green в файл, я не думаю, что индексирование в вектор должно использовать всю оставшуюся память, но я не могу, по-видимому, указать на то, что вызывает ошибку ,

#include <iostream> 
#include <fstream> 
#include <vector> 
#include <string> 

const int PIX_SIZE = 40; 
const int ESCAPE = 1024; 
const char FILEOUTPUT[64] = "juliaOutput"; 
const char COLORFILE[64] = "juliaColor"; 




void juliaOutput(){ 
    std::ofstream fout(FILEOUTPUT); 
    fout << PIX_SIZE << ' ' << PIX_SIZE << ' ' << ESCAPE << std::endl; 

    double dx = 4./(PIX_SIZE-1); 
    double dy = 4./(PIX_SIZE-1); 

    double a =.5; 
    double b = -.5; 

    double row; 
    double col; 

    int count; 

    for(row=2; row>=-2; row-=dy){ 
     for(col=-2; col<=2; col+=dx){ 
      count = 0; 
      double new_x = col; 
      double new_y = row; 
      while(((new_x*new_x) + (new_y*new_y) <= 4) && count <= ESCAPE-1){ 
       double old_x = new_x; 
       double old_y = new_y; 
       new_x = (old_x*old_x) - (old_y*old_y) + a; 
       new_y = (2*old_x*old_y) + b; 
       count++; 
      } 
      fout << count << ' '; 
     } 
     fout << std::endl; 
    } 
    fout.close(); 
} 

void makeColors(std::vector<int> red, std::vector<int> blue, std::vector<int> green){ 
    int i; 
    for(i =0; i < 1025; i++){ 
     if(i <= 255){ 
      red.push_back(i); 
      green.push_back(25); 
      blue.push_back(25); 
     } 
     if(i >= 256 && i <= 511){ 
      red.push_back(25); 
      green.push_back(i-256); 
      blue.push_back(25); 
     } 
     if(i >= 512 && i <= 767){ 
      red.push_back(25); 
      green.push_back(25); 
      blue.push_back(i-512); 
     } 
     if(i >= 768 && i <= 1023){ 
      red.push_back(100); 
      green.push_back(i-768); 
      blue.push_back(100); 
     } 
     else{ 
      red.push_back(255); 
      green.push_back(255); 
      blue.push_back(255); 
     } 
    } 
    std::cout << "Colors Profiles Created" << std::endl; 
} 

void assignColors(){ 

    std::vector<int> red; 
    std::vector<int> green; 
    std::vector<int> blue; 

    makeColors(red, green, blue); 

    std::ifstream fin(FILEOUTPUT); 
    std::ofstream fout(COLORFILE); 

    std::string line; 
    size_t i = 0; 
    while(std::getline(fin, line)){ 
     if(i > 0){ 
      fout << red[i] << ' ' << green[i] << ' ' << blue[i] << '\n'; 
      i += 1; 
     } 
     else{ 
      fout << line << '\n'; 
      i += 1; 
     } 
    } 
    fin.close(); 
    fout.close(); 

} 

int main(){ 

    juliaOutput(); 
    assignColors(); 

    return 0; 
} 
+2

Сначала используйте отладчик, чтобы пройти и определить, какая строка вашего кода вызывает ошибку. Это твоя часть работы, а не наша. –

+0

Если у вас есть вопрос «как вы отлаживаете ошибку сегментации», нам не нужно видеть ваш код. Если вопрос о вашем коде, в чем вопрос в точности? –

+0

Извините, я новичок в C++. Я никогда не использовал отладчик для C++. – Bytehunter

ответ

1

Похоже, вы ждете функцию makeColors изменить векторы, но передать все аргументы по значению. Вы можете изменить:

void makeColors(std::vector<int> red, std::vector<int> blue, std::vector<int> green) 

в

void makeColors(std::vector<int>& red, std::vector<int>& blue, std::vector<int>& green) 

пройти по ссылке, а.

+0

Большое вам спасибо! Это исправило это. – Bytehunter

Смежные вопросы