Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/68.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 分段故障11,尽管分配了大量内存_C_String_Memory_Structure - Fatal编程技术网

C 分段故障11,尽管分配了大量内存

C 分段故障11,尽管分配了大量内存,c,string,memory,structure,C,String,Memory,Structure,我遇到了一个奇怪的错误。当我编译代码时,它会给我以下消息: %i?? [R? R? ? Desktop/prog2 Terminal 51/sls2t0f16cd4dzl3640n4p2w0000gn/T/ private/tmp/com.apple.launchd.AJrzeyltFv/Render ION=343.6 ER=Frank Listeners in:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin ank E=/Users/Fran

我遇到了一个奇怪的错误。当我编译代码时,它会给我以下消息:

%i??
[R?
R?
?
Desktop/prog2
Terminal
51/sls2t0f16cd4dzl3640n4p2w0000gn/T/
private/tmp/com.apple.launchd.AJrzeyltFv/Render
ION=343.6
ER=Frank
Listeners
in:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin
ank
E=/Users/Frank
nk/Desktop/prog2

Segmentation fault: 11
logout
我知道这是由于内存问题造成的。然而,我给了dictionary2与原始字典相同的内存,那么为什么它不能编译整个列表呢

这是我的代码(我知道这有点长,但我觉得传达所发生的一切都是必要的):

#包括
#包括
#包括
#包括
#包括
结构条目
{
字符字[15];
字符定义[50];
};
void dictionarySort(结构条目字典[]){
int i,j,k,word1,word2,dict2Length=1;
bool bnf=假;
结构条目字典2[100]={{};
对于(i=0;i字[0]);i++){
strcpy(&dictionary2[0]。单词[i],&dictionary[0]。单词[i]);
}
i=0;
字1=1;
word2=0;
while(isalpha(字典[word1].word[0])){
而(我用词[word1])){
//printf(“%c”,字典[word1]。单词[i]);
if(字典[word1].word[i]==dictionary2[word2].word[i]){
i++;
bnf=假;
}
else if(字典[word1].word[i]word2;j--){
//话
对于(k=0;k字[0]);k++){
strcpy(&dictionary2[j+1]。单词[k],&dictionary2[j]。单词[k]);
}
//定义
对于(k=0;k字[0]);k++){
strcpy(&dictionary2[j+1]。定义[k],&dictionary2[j]。定义[k]);
}
}
//对于(k=0;kword[word1]))
for(k=0;kword2;j--){
//话
对于(k=0;k字[0]);k++){
strcpy(&dictionary2[j+1]。单词[k],&dictionary2[j]。单词[k]);
}
//定义
对于(k=0;k字[0]);k++){
strcpy(&dictionary2[j+1]。定义[k],&dictionary2[j]。定义[k]);
}
}
for(k=0;k
这行从后到前都有索引

strcpy(&dictionary2[0].word[i], &dictionary[0].word[i]);    
应该是

strcpy(&dictionary2[i].word[0], &dictionary[i].word[0]);
甚至更好

strcpy(dictionary2[i].word, dictionary[i].word);
此外,您对(i…)的循环
基于strlen(&dictionary->word[0])
。是否应将数组项的数目作为参数传递给
dictionarySort()
?目前,循环基于第一个字典条目的长度


我必须继续调试排序。太可怕了。只需使用
qsort()

就可以了,看起来您在计算字典长度时遇到了问题。当你运行它时,它说长度大约是1701996321,这似乎比它应该的要高得多。然后,在最后一个for循环中,就在您打印单词的末尾,您可能超出了词典的范围。注释掉printf,您将看到错误消失了。我先看看Dict2Length

for (i = 0; i < dict2Length; i++) {
    printf ("%s\n", dictionary2[i].word);
}
(i=0;i{ printf(“%s\n”,字典2[i].word); } 使用
qsort

void dictionarySort(struct entry dictionary[]) {
    struct entry dictionary2[100] = {{"",""}};
    int i, n;

    for (i = 0; i < 100 && dictionary[i].word[0] != '\0'; ++i){
        dictionary2[i] = dictionary[i];
    }
    n = i;

    qsort(dictionary2, n, sizeof(*dictionary2), strcmp);

    for (i = 0; i < n; ++i) {
        printf ("%s\n", dictionary2[i].word);
    }
}
void dictionarySort(结构条目字典[]){
结构条目字典2[100]={{“,”};
inti,n;
对于(i=0;i<100&&dictionary[i]。单词[0]!='\0';++i){
字典2[i]=字典[i];
}
n=i;
qsort(字典2,n,sizeof(*字典2),strcmp);
对于(i=0;ivoid dictionarySort(struct entry dictionary[]) {
    struct entry dictionary2[100] = {{"",""}};
    int i, n;

    for (i = 0; i < 100 && dictionary[i].word[0] != '\0'; ++i){
        dictionary2[i] = dictionary[i];
    }
    n = i;

    qsort(dictionary2, n, sizeof(*dictionary2), strcmp);

    for (i = 0; i < n; ++i) {
        printf ("%s\n", dictionary2[i].word);
    }
}