2016-11-30 68 views
1

我試圖編譯這個簡單的程序,它會分配一個dyamic數組並返回它在每個位置5的倍數。但它不起作用,它會向我報告指針中的錯誤。錯誤的數組分配在C

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

int main(int argc, char const *argv[]) { 
    int n; 
    int i; 
    int* ptra; 
    scanf("%d", &n); 
    ptra = malloc(n*(sizeof(int))); 

    for(i=0; i<=n; i++){ 
     ptra[i] = (5*(i+1)); 
     printf("%d\n", ptra[i]); 
    } 
    return 0; 
} 
+0

縮進你的代碼,請。 –

+0

「n」個整數數組包含從'0'到'n - 1'範圍內的元素。現在再看看你的循環,並考慮一下循環條件。 –

+0

它應該是(i = 0; i MayurK

回答

3

指數範圍ptra必須從0n-1(包括兩端)。但在這裏:

for(i=0;i<=n;i++){ 

你要走出界限,那就是undefined behaviour。將其更改爲:

for(i = 0; i < n; i++) { 

注:一定要檢查的所有標準功能故障(在你的代碼scanf()malloc())的回報。

+0

好吧,我已經修復了它,但它仍然不起作用 – fenigo69

+0

您是否添加了我建議的錯誤檢查?請描述什麼「不起作用」。它[按預期工作](http://ideone.com/I5rfrg)。 – usr

+0

編譯器編譯程序,但是當我要運行它時,請向我報告「程序它不被識別爲執行程序或批處理文件」 – fenigo69

0

您的循環前進了一大步超越極限:一定要去只要i<n,而不是i<=n

嘗試這樣做:

for(i=0; i<n; i++){ 
+0

它報告我「該程序不被識別爲執行程序或批處理文件」 – fenigo69