renjiewen1995 2016-09-03 04:31 采纳率: 0%
浏览 2740

关于memset的使用,导致内存访问冲突,是何原因

以下这段c++程序会发生内存访问冲突,但是将memset( visited, false, sizeof(bool) * (n+1) );去掉,就会解决问题,求教高手为什么?

in.txt:
4 3
1 2
2 3
3 2
3 2
1 2
2 3
0 0

#include
#include
#include
#include

using namespace std;

void DFS( int ** data, int begin, int size, bool * visited)
{
if( visited[begin] == true )
{
return;
}else
{
visited[begin] = true;
}
for( int i = 1; i< size +1; i ++)
{
if( data[begin][i] == 1 )
{
DFS( data, i , size,visited) ;
}
}
}
int main()
{
freopen( "in.txt","r",stdin);
int n = 0;
int m = 0;
int **data = NULL;
while( cin>>n>>m && n != 0 )
{
data = new int*[n+1];
for( int i = 0;i < n+1; i++)
{
data[i] = new int[n+1];
}
memset( data, 0, sizeof(int) * (n+1) * (n+1) );
int r = 0,c = 0;
for( int k = 0; k < m ; k++)
{
cin>>r>>c;
data[r][c] = 1;
}
if( m < n-1 )
{
cout<<"NO\n";
continue;
}
bool *visited = new bool[n+1];
memset( visited, false, sizeof(bool) * (n+1) );
DFS( data,1, n, visited);
int flag = 1;
for( int k = 1 ; k< n+1; k++)
{
if( visited[k] == false )
{
flag = 0;
break;
}
}
if( flag == 0 )
{
cout<<"NO\n";
continue;
}
else
cout<<"YES\n";
}
}

题目描述:
给定一个无向图和其中的所有边,判断这个图是否所有顶点都是连通的。
输入:
每组数据的第一行是两个整数 n 和 m(0<=n<=1000)。n 表示图的顶点数目,m 表示图中边的数目。如果 n 为 0 表示输入结束。随后有 m 行数据,每行有两个值 x 和 y(0<x, y <=n),表示顶点 x 和 y 相连,顶点的编号从 1 开始计算。输入不保证这些边是否重复。
输出:
对于每组输入数据,如果所有顶点都是连通的,输出"YES",否则输出"NO"。

  • 写回答

3条回答 默认 最新

  • AlbertS 博客专家认证 2016-09-03 05:34
    关注

    你把false换成0试试

    评论

报告相同问题?

悬赏问题

  • ¥20 iqoo11 如何下载安装工程模式
  • ¥15 本题的答案是不是有问题
  • ¥15 关于#r语言#的问题:(svydesign)为什么在一个大的数据集中抽取了一个小数据集
  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 蓝桥杯单片机第十三届第一场,整点继电器吸合,5s后断开出现了问题
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?