在c中使用指针制作阵列



我是使用C

#include <stdio.h>
int main()
{
  int *i;
  scanf("%d",i);i++;
  while(1){
    scanf("%d",i);
    if(*i==*(i-1)){
     break;}
    printf("%dn",*i);
    i++;
  }
 return 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;
}

希望这个帮助。!!

这里的一些解释。您将i变量声明为指针:

int *i;

指针在任何地方都没有指向并包含一个随机值。以下操作试图在指针指向的内存中编写整数。由于它指向不确定的位置,因此该操作的结果是不可预测的。它可能会崩溃,或者可以在内存的位置写入,该内存可能以后会产生意外行为,或者只是工作。无论如何,它会导致memory corruption

scanf("%d",i);i++;

i++语句实际上增加了指针的值,因此它指向内存中的下一个位置,这也无效。等等。

根据程序的目的,您可以通过多种方式解决此问题。即,如果您只需要一个整数才能使用,则可以执行以下操作:

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]);

或将"我"作为指针:

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内存。因此,您最好将指针保留到数组的开始,以便能够进行free(a);

编辑@@

的编辑

清理代码格式后:

  1. 始终如一地缩进代码
  2. 因此,它遵循公理:每行只有一个语句,并且(最多)每个语句声明一个变量。

那么,很明显,代码包含未定义的行为。(请参阅代码中的@@评论)

@@每个包含未定义行为的陈述可能会导致SEG故障事件。

#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("%dn",*i);  @@ reads integer from memory using uninitialized pointer  I.E. undefined behavior
        i++;
    }
    return 0;
}

通过访问程序不拥有的内存的未定义行为,就是为什么发生SEG故障事件的原因。

相关内容

  • 没有找到相关文章