写入位置 0x00000000023e0000 时发生访问冲突

C++语言 码拜 10年前 (2015-05-11) 1099次浏览 0个评论
 
int e[18]={3,0,3,1,6,2,3,1,4,2,3,2,6,0,9,0,5,2};
	for(int i=0;i<channels;i++)
	{
		for(int j=0;j<e[i];j++){
			Dt[i*a+j]=0;}
		//int aa=a/10000;

		for(int j=e[i];j<4000;j++){
			Dt[i*a+j]=Ds[i*a+j-e[i]];}
		//for(int k=0
		cout<<i<<endl;
	}

其中数组Dt和Ds这样定义:float *Ds=new float[channels*a];float *Dt=new float[channels*a];
当Dt定义为全局变量时,就会出现写入位置 0x00000000023e0000 时发生访问冲突的错误(之所以定义 为全局变量,是因为在main函数之外需要调用数组Dt),而当Dt定义为局部变量时,就不会出现上面的错误。求大神解释一下其中的原理。

顶。。。。。。。。。。
20分
可能和这个channels的初始化有关
20分
同意楼上,全局变量的初始化是被编译在main的第一条语句之前的。
main函数之外需要调用数组Dt,Dt定义成局部变量,外面怎么用
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止。
你把两种情况都设断点看看其他变量的值的变化,如channel

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明写入位置 0x00000000023e0000 时发生访问冲突
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!