c - 是什么导致程序不遵循循环条件?

标签 c loops pointers dynamic-arrays

只是一个基本程序,新手编写的。应该将值读入动态数组,然后以相反的顺序打印出来。您无法预先输入数组的大小,只要输入不是终止字符,数组的大小就会调整。

我认为我写得不错,但是存在关于取消引用指针的错误,并且当我在 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/

相关文章:

代码仅在未使用的数组留在

python - 遍历 send_keys 列表(Selenium 和 Python)

linux - 文件出现后立即删除特定文件类型的文件

c++ - 指向指针问题的指针

swift - 如何在 Swift 中创建一个指针?

c - ISO/IEC 9899 6.8.4.2 ->2 短语是什么意思?

c - 从 ARM 5 迁移到 ARM 6 编译器 : Unknown type name '__STATIC_INLINE' in ARM CMSIS file

C 交叉编译器链接 extern 声明为静态?

loops - Love2d:如何保留窗口内容?

wordpress - 如何创建基本的 WordPress 管理指针?