在c中使用指针生成数组
我对使用c语言还不熟悉,我正在尝试制作一个程序,用指针生成一个数组在c中使用指针生成数组,c,segmentation-fault,C,Segmentation Fault,我对使用c语言还不熟悉,我正在尝试制作一个程序,用指针生成一个数组 #include <stdio.h> int main() { int *i; scanf("%d",i);i++; while(1){ scanf("%d",i); if(*i==*(i-1)){ break;} printf("%d\n",*i); i++; } return 0; } #包括 int main() { int*i; scanf(“%d
#include <stdio.h>
int main()
{
int *i;
scanf("%d",i);i++;
while(1){
scanf("%d",i);
if(*i==*(i-1)){
break;}
printf("%d\n",*i);
i++;
}
return 0;
}
#包括
int main()
{
int*i;
scanf(“%d”,i);i++;
而(1){
scanf(“%d”,i);
如果(*i==*(i-1)){
中断;}
printf(“%d\n”,*i);
i++;
}
返回0;
}
我一直在犯这个错误
命令失败:./a.out
分段故障
我认为您需要创建一个数组并向其读取数据,然后使用指针动态显示它
#include <stdio.h>
#include <stdlib.h>
int main()
{
int *A, n;
printf("\n Enter the size of array : "); // Reading the size of array
scanf("%d",&n);
A = (int*) malloc(sizeof(int) * n); // Allocating memory for array
int i = 0;
for(i = 0; i < n; i++) // Reading data to array
scanf("%d", (A+i));
// Operations on array
for(i = 0; i < n; i++) // Printing array
printf("%d ", A[i]);
return 0;
}
#包括
#包括
int main()
{
int*A,n;
printf(“\n输入数组大小:”;//读取数组大小
scanf(“%d”和“&n”);
A=(int*)malloc(sizeof(int)*n);//为数组分配内存
int i=0;
对于(i=0;i
希望这对你有所帮助 这里只是一点解释。 您在此处将
i
变量声明为指针:
int *i;
指针不指向任何地方,而是包含一个随机值。下面的操作尝试在指针指向的内存中写入一个整数。由于它指向一个未定义的位置,因此此操作的结果是不可预测的。它可能崩溃,或者在内存中写入,这可能会在以后产生意外行为,或者只是工作。在任何情况下,它都会导致内存损坏
scanf("%d",i);i++;
i++
语句实际上增加了指针的值,使其指向内存中的下一个位置,这也是无效的。等等
根据程序的目的,您可以通过多种方式解决此问题。i、 e.如果只需要一个整数,可以执行以下操作:
int i;
scanf("%d", &i); // use an address of 'i' here
...
printf("%d", i);
现在你可以在正常的算术运算中使用“i”。或者,如果需要一个整数数组,可以执行以下操作:
int i = 0;
int a[mysize];
scanf("%d", &a[i]);
i++; // do not forget to check 'i' against 'mysize'
...
printf("%d", a[i]);
或者将“i”作为指针:
int a[mysize];
int *i = a;
scanf("%d", i);
i++; // do not forget to check 'i' against 'mysize'
...
printf("%d", *i);
或者甚至让malloc在内存中分配数组,如下所示:
int *a = malloc(sizeof(int) * mysize);
int *i = a;
scanf("%d", i);
i++;
...
printf("%d", *i);
请注意,在上一个示例中,在某个时候您需要释放
内存。因此,最好将指针保持在数组的开头,这样才能执行free(a)
以前缀编辑@@
清理代码格式后:
#include <stdio.h>
int main( void )
{
int *i; @@ uninitialized pointer declared
scanf("%d",i); @@ accessing random memory I.E. undefined behavior
i++;
while(1)
{
scanf("%d",i); @@ accessing random memory I.E. undefined behavior
if(*i==*(i-1)) @@ reads two consecutive integers using uninitialized pointer I.E. undefined behavior
{
break;
}
printf("%d\n",*i); @@ reads integer from memory using uninitialized pointer I.E. undefined behavior
i++;
}
return 0;
}
#包括
内部主(空)
{
int*i;@@n已声明未初始化的指针
scanf(“%d”,i);@@n访问随机内存,即未定义的行为
i++;
而(1)
{
scanf(“%d”,i);@@n访问随机内存,即未定义的行为
if(*i==*(i-1))@@n使用未初始化的指针(即未定义的行为)读取两个连续的整数
{
打破
}
printf(“%d\n”,*i);@@n使用未初始化的指针(即未定义的行为)从内存中读取整数
i++;
}
返回0;
}
seg故障事件之所以会发生,是因为程序访问不属于自己的内存而导致的未定义行为。数组是什么?能否解释一下程序最后应该做什么?这是因为您的代码试图访问未分配的内存地址。您有一个指针变量
i
,但它指向哪里呢?也许您应该先阅读?指向有效数据的指针不是数组,未初始化的指针也没有用。当您否决某个答案时,请务必发表评论,说明该答案被否决的原因。