Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个简单的C代码会给出总线错误? #包括 #包括 #包括 #包括 #包括 //这里我声明了全局变量。 国际答复者[26]; 字符*字母1; 静态void makeRepLetters() { printf(“输入makeRep”); int i=0; 对于(;i_C - Fatal编程技术网

为什么这个简单的C代码会给出总线错误? #包括 #包括 #包括 #包括 #包括 //这里我声明了全局变量。 国际答复者[26]; 字符*字母1; 静态void makeRepLetters() { printf(“输入makeRep”); int i=0; 对于(;i

为什么这个简单的C代码会给出总线错误? #包括 #包括 #包括 #包括 #包括 //这里我声明了全局变量。 国际答复者[26]; 字符*字母1; 静态void makeRepLetters() { printf(“输入makeRep”); int i=0; 对于(;i,c,C,而言,此处最有可能发生碰撞: #include <stdio.h> #include <stdlib.h> #include <assert.h> #include <string.h> #include <math.h> // Here i declared global variables. int repLetters[26]; char* letters1; static void makeRepLetters() {

而言,此处最有可能发生碰撞:

#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
#include <string.h>
#include <math.h>

// Here i declared global variables.
int repLetters[26];
char* letters1;

static void makeRepLetters()
{
    printf("enter makeRep");
    int i =0;
    for(;i<26;i++)  
        repLetters[i] =0;
    for(i=0;i<26;i++) {
        repLetters[((letters1[i]) - 97)] +=1; 
    }
}      

int main(int argc, char *argv[])
{
    int i=0,num =10;
    if(argc != 2) {
        printf("Usage: %s <letters>\n", argv[0]);
        return 1;
    }
    //letters1 = (char*)malloc(sizeof(char)* strlen( argv[1]));
    //strcpy(letters1,argv[1]); 
    letters1 = argv[1];
    printf("\n letters1 = %s",letters1);
    scanf("%d",&num);
    printf("\ncheck test\n");

    makeRepLetters();
    for(i=0;i<26;i++)
        printf("\n %c occured %d tyms",i+97,repLetters[i]);
    return 0;
}
如果
字母1
不包含26个字符怎么办?您现在正在访问一个超出边界的数组


唯一确定的方法是在调试器中运行程序(发生崩溃时,您总是应该这样做).

不要假设您曾经为
字母1
@chris分配过内存,我是通过分配内存来完成的,然后在同一个位置也出现了相同的错误。您可以看到我对内存分配代码进行了注释,并直接将字母1指向argv[1];请注意,由于您在
makeRepLetters()中打印的消息
不会以换行符结尾,并且您也不会
fflush(stdout)
,在程序崩溃之前输出不会出现。如果您想查看诊断输出,请确保它以换行符结尾(即使这样,如果您将输出发送到文件,您也希望在打印后执行
fflush(stdout)
fflush(0)
).或者,如果字母1[i]的值小于97怎么办?那么您正在对回复者使用负索引。或者,如果“abc…xyz”的值不是97…122怎么办?
repLetters[((letters1[i]) - 97)] +=1;