2011-07-25 9 views
1

私は、Cで動的に成長する配列/データ構造体を作成しようとしています。以下に私が持っているCコードを示します。しかし、配列を出力すると、スナップショットに以下のようなランタイムエラーが発生します。何がうまくいかないのですか?これは、Windows-7上でMS-Visual C++ 2010(Free版)を使用してコンパイルされています。reallocを使用してこのCコードにエラーがありますか?

enter image description here

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

int main(void) { 
int *a; 
int i = 5; 

if((a = (int *)malloc(i * sizeof(int))) == NULL) { 
    fprintf(stderr, "Error: failed malloc\n"); 
    return 1; 
} 
for(i = 0; i < 5; i++) 
    a[i] = i; 

printf("-- array after malloc\n"); 
for(i = 0; i < 5; i++) 
    printf(" a[%d] = %d\n", i, a[i]); 

if((a = (int *)realloc(a, i * sizeof(int))) == NULL) { 
    fprintf(stderr, "Error: failed realloc\n"); 
    return 1; 
} 
for(i = 0; i < 10; i++) 
    a[i] = i; 


printf("\n-- array after realloc\n"); 
for(i = 0; i < 10; i++) 
    printf(" a[%d] = %d\n", i, a[i]); 


free(a); 
return 0; 
} 

答えて

2
//<important> 
//weren't you supposed to do i = 10 here ???? 
//</important> 
if((a = (int *)realloc(a, i * sizeof(int))) == NULL) { 
    fprintf(stderr, "Error: failed realloc\n"); 
    return 1; 
} 
for(i = 0; i < 10; i++) 
    a[i] = i; 

私はこれが10に、配列のサイズを変更し、それを使用することになったと思いますが、あなたは10iを変更したことがないので、iはまだ5であり、あなたが範囲

+0

'i'は4ではなく5 – orlp

+0

@nightcrackerある:' i' 5ではなく4 :) –

+0

(15文字):) woopsああ – orlp

1
の外に出ます

この行の:

if((a = (int *)realloc(a, i * sizeof(int))) == NULL) { 

iにはまだ値5が含まれています。したがって、基本的にはreallocは5つの整数になりますが、次のループでは10個の整数が割り当てられます。エラーです。

これは、固定コードのようになります。

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

int main(void) { 
int *a; 
int i; 

if((a = (int *)malloc(5 * sizeof(int))) == NULL) { 
    fprintf(stderr, "Error: failed malloc\n"); 
    return 1; 
} 

for(i = 0; i < 5; i++) 
    a[i] = i; 

printf("-- array after malloc\n"); 
for(i = 0; i < 5; i++) 
    printf(" a[%d] = %d\n", i, a[i]); 

if((a = (int *)realloc(a, 10 * sizeof(int))) == NULL) { 
    fprintf(stderr, "Error: failed realloc\n"); 
    return 1; 
} 

for(i = 0; i < 10; i++) 
    a[i] = i; 

printf("\n-- array after realloc\n"); 
for(i = 0; i < 10; i++) 
    printf(" a[%d] = %d\n", i, a[i]); 


free(a); 
return 0; 
} 
+0

私は5ではありません4.以前のforループは5で終了します。 – goldenmean

+0

@Goldenmean:はい、申し訳ありませんが、私はそこで少し失敗しました。 – orlp

関連する問題