如何避免在 C 中检测到堆栈崩溃?下面的代码有什么问题吗?

问题描述 投票:0回答:1

我正在制作一个程序,可以自动执行 Luhn 算法;它从第一个信用卡开始,取出信用卡的所有其他号码,将它们乘以二,然后将相乘的数字相加。我还没有完成,但遇到了一个名为“检测到堆栈粉碎”的问题。有人可以提供帮助或建议吗?

这是代码:

#include <stdio.h>
#include <math.h>

int main(void) {
    long card;
    do
    {
        printf("Enter the card number: ");
        scanf("%li", &card);
    }
    while (card < 1000000000000000);

    int y = 10;
    int z = 15;
    int x = 1;
    int arr[8];

    for(int i = 0; i < 8; i++)
    {
        double result = pow(y,z); 

        double a = (card / result); 
        long roundedA = floor(a);

        double b = roundedA /10;
        long roundedB = floor(b);
        long c = roundedB * 10;
        int d = roundedA - c;
        z = z-2;

        arr[x] = d;
        x++;
    }

    int newarr[8];
    int arraynumber;
    for(int j = 0; j < 7; j++)
    {
        arraynumber = 2 * arr[j];
        newarr[j] = arraynumber;
    }  

    int sum = 0;
    for(int k = 0; k < 7; k++)
    {
        sum = sum + newarr[k];
    }

    if (sum % 10 == 0)
    {
        printf("This checks out, boss.");
    }
    else
    {
        printf("Security will escort you out of the building big man.");
    }
}

我不知道这意味着什么,所以我不知道该尝试什么。

arrays c
1个回答
0
投票

是的,我同意其他人的观点 在 CS50 中,我需要创建一个类似的程序,并将用户输入作为字符串。它要好得多,因为您可以将其视为数组,对其进行迭代并进行 Luhn 算法所需的计算。第一个总和,第二个总和和布尔检查,就是这样 您的问题可能是因为使用了太多的长整型和双精度,堆必须增长太多并“破坏”堆栈 内存布局

© www.soinside.com 2019 - 2024. All rights reserved.