在调试的时候跳出错误提示: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大小的单元,而不是数组,导致你越界引起堆破坏,下一次分配内存时可能崩溃