2012-10-19 45 views
-1

我不斷收到此錯誤試圖運行調試:KERN_INVALID_ADDRESS有我難倒

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循環,查看數學運算是如何更好地理解它的。

+0

看起來像一個空指針? – mfrankli

+0

什麼是'GetString'? 'string'? – nneonneo

+3

是否至少有一個參數被提供給程序,它不超過24個字符? – hmjd

回答

0

我終於得到它得益於hmjd我跑它錯誤地我就開始計劃

gdb vignere HHHHH 

這是不正確我跑了

gdb vignere 
run HHHHHH 

和它的工作完美!

+2

您應該爲程序添加一個'if(argc> 1)'檢查來避免這種情況。 – hmjd

1

如果GetString()返回null,然後調用strlen(null)會給這個錯誤。 GetString()部分的其他錯誤也可能導致此問題。

1

什麼是類型'字符串'在C? Strlen()需要C型數組,而不是一些自定義的「字符串」類型。 (+上面指出有空輸入的可能性)

+0

''包含'typedef char * string;' - 好或壞。 –