Visual Studio C 中的动态数组

Visual Studio dynamic arrays in C

我用 GCC 编程有一段时间了 但我决定改用 Visual Studio 开始工作,因为 它很舒服。 无论如何,问题是在 Visual studio 中,动态数组并不真正起作用 就像他们在 GCC 中所做的那样,所以我改用 malloc

打印分配的第一个值时,我会得到正确答案。 但是,下一个值将是错误的,第二个值将永远是错误的,第三个值将是错误的,我不明白为什么。

例如,当插入 1,2,3 并尝试打印第二个点时,它给出 5。

int main(void)
{
 K1();
 printf("%d\n", p1+1);
 return 0;
]

使用 p1[i] 程序崩溃。 p1,是整数 *

void K1(void)
{

 int i;

 printf("n1");
 scanf_s("%d", &n1);

 p1 = (int*)malloc(sizeof(int) * n1);

 for(i=0;i<n1;i++)
 {
    scanf_s("%d", &p1 + i*sizeof(int));
 }
}

我不知道是什么问题。

这一行:

scanf_s("%d", &p1 + i*sizeof(int));

应该是:

scanf_s("%d", p1 + i);

或更好:

scanf_s("%d", &p1[i]);


您在此处的 printf 语句中也有错误:

printf("%d\n", p1+1);

这应该是:

printf("%d\n", *(p1+1));

或更好:

printf("%d\n", p1[1]);

还要注意you should not cast the result of calls such as malloc in C,所以:

p1 = (int*)malloc(sizeof(int) * n1);

应该是:

p1 = malloc(sizeof(int) * n1);

或更好:

p1 = malloc(n1 * sizeof(*p1));