Ошибка сегментации при неправильном использовании 2d массивов? - PullRequest
0 голосов
/ 07 октября 2018

Я получаю ошибку сегментации в строке 57 и не уверен, почему ...:

41    int numRows = C/(K*L);
42    int numCols = K;
43  
44    tagArray = (int **) malloc(numRows*sizeof(int)); // creates rows in array with C/K*L rows
45    lruArray = (int **) malloc(numRows*sizeof(int)); // creates rows in array with C/K*L rows
46  
47    for(int i = 0; i<numRows;i++)
48      {
49        *(tagArray + i) = (int*) malloc(numCols*sizeof(int)); // fills each row with K columns
50        *(lruArray + i) = (int*) malloc(numCols*sizeof(int)); // fills each row with K columns
51      }
52  
53    for(int i = 0; i<numRows; i++)
54      for(int j = 0; j<numCols; j++)
55        {
56          tagArray[i][j] = -1;
57          lruArray[i][j] = -1;
58        }
59  

Есть что-то, чего мне не хватает?Я вполне уверен, что я правильно говорю ..

Ответы [ 2 ]

0 голосов
/ 07 октября 2018
44    tagArray = malloc(numRows*sizeof(int *));
45    lruArray = malloc(numRows*sizeof(int *));
46  
47    for(int i = 0; i<numRows;i++)
48      {
49        tagArray[i] = malloc(numCols*sizeof(int));
50        lruArray[i] = malloc(numCols*sizeof(int));
51      }
0 голосов
/ 07 октября 2018

В

tagArray = (int **) malloc(numRows*sizeof(int)); // creates rows in array with C/K*L rows
lruArray = (int **) malloc(numRows*sizeof(int)); // creates rows in array with C/K*L rows

Вы должны выделить место для int*, а не int.

Не приводите результат malloc()в C!

...