2016-11-10 6 views
1

У меня есть следующий код с одним динамически распределенным массивом «данные». Я передаю размер массива в качестве аргумента командной строки. Программа работает нормально до тех пор, пока значение datasize = 33790. Оно дает ошибку сегментации, если я попытаюсь предоставить значение> 33790.Ошибка сегментации: динамическое выделение большого целочисленного массива

«33790» может быть специфичным для машины. Я пытаюсь понять, почему динамически распределенная память вернет seg-ошибку после определенного размера. Любая помощь приветствуется. :)

#include "iostream" 
#include <stdlib.h> 
#include "iomanip" 
#include "ctime" 

#define N 100000 

using namespace std; 

int main(int argc, char* argv[]) 
{ 
    int a; 
    cout<<"Size of int : "<<sizeof(int)<<endl; 

    long int datasize = strtol(argv[1],NULL,0); 
    cout<<"arg1 : "<<datasize<<endl; 
    double sum = 0; 
    int *data; 
    data = new int(datasize); 

    clock_t begin = clock(); 
    for(int i = 0; i < N; i++)        //repeat the inner loop N times 
    { 
     //fetch the data into the cache 
     //access it multiple times in order to amortize the compulsory miss latency 
     for (long int j = 0; j < datasize; j++) 
     { 
      sum += data[j];         //get entire array of data inside cache 
     } 
    } 

    clock_t end = clock(); 

    double time_spent = (double) (end - begin); 

    cout<<"sum = "<<sum<<endl; 
    cout<<"Time Spent for data size = "<<argv[1]<<" is "<<time_spent<<endl; 

    delete[] data; 

    return 0; 
} 
+0

C не является C++ не C. Не добавляйте несвязанные теги. – Olaf

ответ

2

Вы не выделяя какие-массивы (имеющие нескольких элементов), но выделять только один int, имеющий значение datasize.

Использование new int[datasize] вместо new int(datasize) выделить массив, имеющий intdatasize элементы.

+1

Если этот ответ решает вашу проблему, подумайте о том, как правильно это обозначить. –

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