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

关于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试试

    评论

报告相同问题?

悬赏问题

  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多