私は新しいCプログラミングに非常に興味を持っています。現在、動的にメモリを割り当てるためのACプログラムを書いています。
プログラムの段階は次のとおりです。
n
ユーザーから数字を取得します- それらを印刷します
n
ユーザーから別の番号を取得します- 両方の数値セットを出力します
私のプログラムは の小さな値では問題n
なく動作しますが、200000 のような大きな値ではうまくいきません。つまり、最初に 100000 個の数字を入力し、次に別の 100000 個の数字を入力しました。
最初のセットでは正常に実行されますが、その後、セグメンテーション違反が発生します。gdb
デバッグに使用します。SIGSEGV エラーが表示されます。
誰かが何が起こったのか説明して、解決策を教えてもらえますか?
#include<stdio.h>
#include<malloc.h>
int main(void)
{
unsigned int *p=NULL;
unsigned int n;
unsigned int i;
unsigned int *a;
unsigned int *t;
unsigned int k=0;
printf("Enter no.of elements...");
scanf("%d", &n);
p = (unsigned int*)malloc(n*sizeof(unsigned int));
a = p;
t = p;
for (i=0; i<n; i++, *p++, k++) {
scanf("%d",p);
}
for(i=0;i<n;i++,a++) {
printf("Element No-%d %d Address->%d\n", i, *a, a);
}
a=t;
printf("next time...how many elements do you enter");
scanf("%d",&n);
t=p;
a = (unsigned int*)realloc((void *)a, n*sizeof(int));
for (i=0; i<n; i++, *t++ ,k++) {
scanf("%d",t);
}
printf("next time...printing..\n");
for (i=0; i<k; i++, a++) {
printf("Element No-%d %d Address->%d\n",i,*a,a);
}
free(p);
free(a);
}