2014-03-05 41 views
0

我有兩個指針數組。我需要做簡單的算術與他們同時循環會通過指針數組循環的算術

float **x_points, **y_points; 

x_points = malloc(sizeof(float*) * n); 
y_points = malloc(sizeof(float*) * n); 

for(i = 0; i < n; i++) { 
    printf("x"); 
    printf("%i",i); 
    printf(" : "); 
    x_points[i] = malloc(n * sizeof (float)); 
    scanf("%f",x_points[i]); 

    printf("y"); 
    printf("%i",i); 
    printf(" : "); 
    y_points[i] = malloc(n * sizeof (float)); 
    scanf("%f",y_points[i]); 
} 

x_points[n] = NULL; 
y_points[n] = NULL; 

在這裏,我有問題:

int k; 

for(k=0; k < i; k++) { 
    R += *x_points[k] * *y_points[k+1] - *x_points[k+1] * *y_points[k]; 
} 

你能不能告訴我爲什麼這個代碼顯示了我一個窗口說,該系統得到了一個信號,這就是爲什麼停止該計劃?謝謝你,我會欣賞它!

+0

此代碼有多個問題,而不是僅僅與環路(放置其中的仍是一個謎,因爲你還沒有發佈的[ SSCCE](http://www.sscce.org))。 – WhozCraig

回答

1

你分配n個指針:

x_points = malloc(sizeof(float*) * n); 
y_points = malloc(sizeof(float*) * n); 

但你分配的內存在這裏你所訪問的過去:

x_points[n] = NULL; 
y_points[n] = NULL; 

由於C0-basedindices,你只能從0n-1

所以,你要麼需要分配n+1,或者把你的nulln-1

編輯:亦是hmjd說。我沒有抓住它。

0

原因可能是您正在訪問未分配的內存位置。
變化

for(k=0; k < i; k++) 

for(k=0; k < i - 1; k++) 
0
x_points[n] = NULL; 
y_points[n] = NULL; 

也是無效的,因爲你指定分配給它的內存之外的價值。

變化malloc調用了一下,如果仍想實現這個

malloc(n+1 * sizeof (float))