2014-09-10 2 views
0

Im получаю ошибку во время выполнения EXC_BAD_ACCESS (код = 1, адрес = 0х0) на линииC++/ошибка :: EXC_BAD_ACCESS код ошибки = 1

asize = **y[0] + **y[1]; 

в функции суммирования. Я знаю, что проблема не утечка памяти, поэтому я не совсем понимаю, как решить эту проблему.

void allocArr (int **&x, int ***&y, int **&q, int ****&z) 
{ 
    x = new int *[2]; 
    y = new int **(&*x); 
    q = &*x; 
    z = new int ***(&q); 
} 

void summation(int ***&y, int arr[]) 
{ 
    int asize = 0; 
    asize = **y[0] + **y[1]; 
    **y[2] = *new int [asize]; 

    *(arr + 2) = asize; 

} 

void putArr(int **&x, const int &size1,const int &size2) 
{ 
    x[0] = *new int* [size1]; 

    x[1] = *new int* [size2]; 

} 
int main() 
{ 
    int size1, size2; 
    int a = 1, b = 2; 

    int** x; 
    int*** y; 
    int** q; 
    int**** z; 

    int arr[2]; 

    allocArr(x, y, q, z); 
    Input(x, arr, size1, size2, a, b); 
    summation(y, arr); 
    display(z); 


} 

Благодарим за помощь.

+7

Что именно вы пытаетесь выполнить с помощью этого кода? У этой вещи больше звезд, чем у Млечного Пути. – PaulMcKenzie

+0

Не могли бы вы объяснить, что вы пытаетесь сделать? Это похоже на действительно постороннее использование *****. – Rob

+0

y, похоже, не имеет значения в любой точке. – Yay295

ответ

0

Три вещи. 1.) Параметрами функции для y являются int * &. Вы перегрузили int оператором скобки где-то еще? Как указано, указатель int не должен иметь []. 2.) Операторы скобок выше в приоритете, чем оператор разыменования. (Почти всегда хорошая идея заключить их в круглые скобки). Как это написано, оператор скобки будет выполняться перед дереф. 3.) Кажется необычным, что вам нужно столько операторов разыменования. Действительно ли они нужны?

+0

. К сожалению, вся эта цель этой программы заключается в использовании множественного указателя уровня, как указано моим профессором. –