2015-09-19 3 views
-2

У меня есть «ошибка сегментации: 11» с этим кодом, и я не могу найти решениеСегментации: 11 - C функция

static const int N = 512; 
static const int M = 64; 
static const int K = sizeof(int) * 8; 
static const int SZ = N*M/K; 

void readFromFile(int *v); 

int main(void){ 
    int v[SZ]; 
    readFromFile(v); 
} 

void readFromFile(int *v) { 
    ifstream f; 
    f.open("...path/file.txt"); 
    char c = f.get(); 
    int i = 0; 
    while (f.good()) { 
     v[i] = c - '0'; 
     c = f.get(); 
     i++; 
    } 
    f.close(); 
} 

У меня есть целочисленный массив и файл, используемый для заполнения массива , Это часть кода, используемая для заполнения массива int для вычислений cuda. Я использую nsight и nvcc.

+0

Вопросы, требующие помощи по отладке («почему этот код не работает?») Должны включать в себя желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для воспроизведения в самом вопросе. Вопросы без четкого описания проблемы не полезны другим читателям. См.: Как создать минимальный, полный и проверенный пример. – Olaf

+0

Действительно ли это настоящий код? – ameyCU

+0

Пожалуйста, укажите соответствующий код, в частности, расчет в 'f' и определение' N'. – mastov

ответ

2

Вы код говорит N = 512 и вы объявляете v, как int v[N]; Но если ваш файл имеет больше характера, чем N то i получить больше, чем N и ошибка сегментации генерировать как вы доступ к неправильному индексу v.

int i = 0; 
while (f.good()) { 
    v[i] = c - '0'; 
    c = f.get(); 
    i++;     //No checking if it is greater than N 
} 

На самом деле лучше использовать как

char c; 
int i = 0; 
while ((c=f.get())!=EOF) { 
    v[i] = c - '0'; 
    i++; 
} 

И вы должны также проверить предел i для дальнейшей минимизации ошибок.

+0

Размеры одинаковые. Я добавил печать в readFromFile, но завершение работы перед вызовом функции. – mary

+0

Инициализировать массив, более того, может возникнуть проблема с белым пространством. Вы можете поместить некоторый символ маленькой суммы в файл для отладки. – ashiquzzaman33

+1

Проблема заключалась в f.goog(). Я решил использовать f.eof() – mary

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