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));
我用 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));