2016-12-18 6 views
-2

Почему этот код не работает и что будет решением?Назначение массиву в C

В функции, указанной ниже в коде, я пытаюсь назначить все значения, сгенерированные этой функцией, в массив, создавая несколько более простой вид цикла с int o. (потому что для начала присваивания от начала массива можно использовать не указанные выше петель)

Ошибка программы.

#include <stdio.h> 
#include <stdlib.h> 


int main() 
{ 

int i; 
int s; 
int o; 
int n; 
n=20; 
long int arr[n]; 
long int arr2[n]; 



for(i=0; i<n; i++){ 
    arr[i]=(i+1)*6; 

} 

//this function seems to do problems 
o=0; 
for(i=0; i<n-1; i++){ 
    for(s=1; s<n-i-1; s++){ 
     arr2[o]=arr[i+s]-arr[i]; o++; 
    } 
} 




    return 0; 
} 
+0

Пожалуйста, измените свой вопрос с помощью кнопки «edit» чуть ниже тегов и дайте нам подсказку о том, что именно вы видите. Сообщения об ошибках? Ожидаемые результаты или фактические результаты? Не тот цвет? ??? –

+0

@BobJarvis Как я уже сказал, программа просто падает без выхода. – SamS

+1

Эта программа не производит выход. Как вы можете сказать, что он разбился? –

ответ

3

Он выходит из строя из-за этой линии:

arr2[o]=arr[i+s]-arr[i]; o++; 

В частности, o++ часть. Вы вызываете это внутри вложенного цикла, поэтому o++ будет называться более чем n раз, тем самым переполняя буфер, выделенный для него.

o достигает 171 в этом примере - так что вам нужно либо сделать arr2 достаточно большим, либо (более вероятно) переместить o++ во внешний цикл.

+0

Я также пытался сделать arra2 больше, но, похоже, я недооценил его длину ... n * 10, похоже, все в порядке, мне просто нужно проверить печатные значения. – SamS

+1

Не имеет смысла ставить o ++ во внешнем цикле, потому что вместо того, чтобы делать внутренний цикл, он мог просто поставить: arr2 [o ++] = arr [n - 2] - arr [i]; – koper89

+0

Могу ли я? Это кажется разумным. Благодарю. – SamS