【发布时间】:2015-01-16 19:40:45
【问题描述】:
下面是我创建的名为 inputReader 的方法的代码,它从文本文件读取输入并将其复制到结构 wordz 并从该结构中检索 3 个最常用的单词,如下所示。
我试图将所有 3 个单词作为一个指针连接起来,这样我就可以将它返回给 main 方法,但是每当我使用任何方法来处理 w1、w2、w3 时,它都会复制到一个新的结构或数组或指针,我总是收到此错误“分段错误(核心转储)”
知道为什么会发生这种情况或我可以如何解决它吗?
结构代码:
#define maxLetters 101
typedef struct {
char word[maxLetters];
int freq;
} WordArray; //struct type
代码:
char * w1; // most frequent word
char * w2; // second most frequent word
char * w3; // third most frequent word
// finds w1
for(j = 0; j < uniqueWords; j++)
if(wordz[j].freq == freqz[uniqueWords-2]+1)//excludes whitespace frequency
w1 = wordz[j].word;
// finds w2
for(j = 0; j < uniqueWords; j++)
if(wordz[j].freq == freqz[uniqueWords-3]+1)//excludes whitespace frequency
w2 = wordz[j].word;
// finds w3
for(j = 0; j < uniqueWords; j++)
if(wordz[j].freq == freqz[uniqueWords-4]+1)//excludes whitespace frequency
w3 = wordz[j].word;
char *p;
// if i dont include strcat methods the method runs fine and outputs fine
strcat(p, w1); // once this operation is executed i get the error
strcat(p, " ");
strcat(p, w2);
strcat(p, " ");
strcat(p, w3);
【问题讨论】:
-
无法保证最大频率字数为 size-2,size-3, size-4。 (也没有看到任何迹象表明 size-1 实际上是空白频率计数器。)建议在检查第二个和第三个最常见的单词并在已提取作品的偏移量,因此那些已选择的单词将被忽略。
-
除非这个数组:freq[] 是一个排序的频率数组,这可能不起作用,可能不起作用,并且当最频繁的字数是重复值时不起作用,因为它总是为每个条目选择相同的单词
-
这个指针'p'需要定义一些内存区域来接收单词。建议类似:'char *p = malloc(3*(maxLetters)+4));'当然,检查 malloc 的返回值以确保操作成功。 +4 插入 3 个空格 + 最后的 nul 字符。注意:按照惯例,#define 名称是这样写的:MAX_LETTERS 全部大写,单词用下划线分隔
标签: c linux struct segmentation-fault