Deduplicate.exe已触发了一个断点。求指导

C++语言 码拜 8年前 (2017-04-27) 2497次浏览
在调试的时候跳出错误提示:Deduplicate.exe已触发了一个断点。
经过调试发现问题出在::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];

100

否则你只是分配一个char大小的单元,而不是数组,导致你越界引起堆破坏,下一次分配内存时可能崩溃

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Deduplicate.exe已触发了一个断点。求指导
喜欢 (0)
[1034331897@qq.com]
分享 (0)