在调试的时候跳出错误提示:Deduplicate.exe已触发了一个断点。
经过调试发现问题出在::insert(char* s1)函数中的firstchar=new charNode(s1,0,NULL);语句
发现错误出现在输入的字符串长度长于24个字母时发生错误,下面是其中一个产生错误的输入实例:
10
abcd
bcccbabaccccabbabbbaaaaa
想了半天也不知道问题出在哪,求高手指点,具体代码如下:
经过调试发现问题出在::insert(char* s1)函数中的firstchar=new charNode(s1,0,NULL);语句
发现错误出现在输入的字符串长度长于24个字母时发生错误,下面是其中一个产生错误的输入实例:
10
abcd
bcccbabaccccabbabbbaaaaa
想了半天也不知道问题出在哪,求高手指点,具体代码如下:
#include <stdio.h> #include <stdlib.h> #include <string.h> #define smax 999983 #define slength 42 long long snum = 0; struct charNode { char* s; bool outputed; charNode* nextchar; charNode(){nextchar=NULL;s=NULL;outputed=false;} charNode(char* s1,bool outputed1,charNode* nextchar1):s(s1),outputed(outputed1),nextchar(nextchar1){} }; struct charTable { charNode* firstchar; charTable(){firstchar=NULL;} void insert(char* s1); }chartable[smax]; void charTable::insert(char* s1) { if (!firstchar) { firstchar=new charNode(s1,0,NULL); } } int main(int argc, char * argv[]) { int n; scanf("%d\n",&n); for (int i=0;i<n;i++) { char *stemp=new char(slength); gets(stemp); chartable[snum++].insert(stemp); } return 0; }
解决方案
100
char *stemp=new char(slength);
改成:
char *stemp=new char[slength];
改成:
char *stemp=new char[slength];
100
否则你只是分配一个char大小的单元,而不是数组,导致你越界引起堆破坏,下一次分配内存时可能崩溃