只是一个基本程序,新手编写的。应该将值读入动态数组,然后以相反的顺序打印出来。您无法预先输入数组的大小,只要输入不是终止字符,数组的大小就会调整。
我认为我写得不错,但是存在关于取消引用指针的错误,并且当我在 VS 中运行它时,它甚至不会注册输入。当在其他编译器中尝试时,它会注册输入,但不会以“-1”终止。
想了想,查了一下,我没有注意到我的错误,希望你能帮助我。
编辑:感谢您稍后指出分号,但现在输入 2 或 3 个输入后出现“堆损坏错误”。出了什么问题?
int i=0;
int *p, *a;
int n=1;
p = (int*)malloc(n * sizeof(int));
printf("Enter integers here, and input -1 when done:\n");
while (p[i] != -1);
{
scanf_s("%d", &p[i]);
n = i + 1;
a= (int*)malloc(n * sizeof(int));
for (int j = 0; j < n; ++j)
{
a[j] = p[j];
}
free(p);
p = NULL;
p= (int*)malloc(n * sizeof(int));
for (int k = 0; k < n; ++k)
{
p[k] = a[k];
}
free(a);
a = NULL;
++i;
}
--i;
if (i <= 0)
{
printf("%d", p[i]);
--i;
}
free(p);
p = NULL;
最佳答案
while (p[i] != -1);
删除尾随的;
。
此外,malloc
会为您提供未初始化的内存,因此第一次迭代时条件很可能不成立。您可能需要一个 do { ... } while(...);
循环。
关于c - 是什么导致程序不遵循循环条件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58554297/