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);
}
}