KERN_INVALID_ADDRESS让我难过

时间:2012-10-19 14:31:49

标签: c vigenere cs50

我在尝试运行调试器时遇到此错误:

Program received signal EXC_BAD_ACCESS, Could not access memory.
Reason: KERN_INVALID_ADDRESS at address: 0x0000000000000000
0x00007fff8c2414f0 in strlen ()

这是我的代码:

#include <stdio.h>
#include <cs50.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
    char s2[25];
    strcpy(s2, argv[1]);
    int keyLen = strlen(s2);
    printf("Please enter a string of text to be encrypted!\n");
    string p = GetString();
    for (int i = 0, n = strlen(p); i < n; i++)
    {
        if (isupper(p[i])){
        int sum = (p[i] - 'A') + (s2[i % keyLen] - 'A');
        char c = 'A' + sum%26;
        printf("%c", c);
        }
    }
    printf("\n");
    printf("%d\n", keyLen);

}

我可以编译没有错误的代码,它可以像它应该的那样工作。我正在运行调试器以进入for循环并查看数学正在做什么以更好地理解它。

3 个答案:

答案 0 :(得分:1)

如果GetString()返回null,则调用strlen(null)会出现此错误。 GetString()的其他错误也可能导致这种情况。

答案 1 :(得分:1)

什么是类型&#39;字符串&#39;在C? Strlen()期望C型数组而不是一些自定义的字符串&#39;类型。 (+如上所述,存在输入空值的可能性)

答案 2 :(得分:0)

我终于得到了感谢hmjd我运行不正确我会启动程序

gdb vignere HHHHH

哪个不正确我跑了

gdb vignere
run HHHHHH

它完美无缺!