Ошибка сегментации потока строк C ++ - PullRequest
0 голосов
/ 23 ноября 2011

Я написал эту программу:

#include <sstream>
#include <math.h>
#include <string>
#include <vector>
using namespace std;

double distance(vector<double> *, vector<double> *, int);
const char* distances(vector<vector<double>* >, int);

double distance(vector<double> a, vector<double> b){
    double result = 0, di;
    for(int i=0;i<a.size();i++){
        di = a[i] - b[i];
        result += di*di;
    }
    return sqrt(result);
}

const char* distances(vector<vector<double>* > vectors, int accuracy=1){
    stringstream graphstr;
    graphstr << "strict graph {\n";
    for(int i=0; i<vectors.size();i++){
        int j=i+1;
        while(j<vectors.size()){
            graphstr << "\t" << i << " -- " << j << "\t [len=" << distance(vectors[i],vectors[j]) << "];\n";
            j+=accuracy;
        }
    }
    graphstr << "}\n";
    return graphstr.str().c_str();
}

и когда vectors.size() больше 70, это вызывает ошибку сегментации. в чем проблема?

когда я не добавляю новые строки в graphstr, это нормально.

Ответы [ 2 ]

6 голосов
/ 23 ноября 2011

Вы возвращаете указатель на строку, которая освобождается при выходе из функции.

0 голосов
/ 23 ноября 2011

Попробуйте это

Измените возвращаемое значение с const char * на char * и

 char* buff = new char[4096];
 strcpy(buff,graphstr.str().c_str(),graphstr.str().size());
 return buff;

Не забудьте освободить память, возвращенную с помощью delete

...