我对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);
}