运行C程序时出现0x00401ee7指令引用的0x00000034内存.该内存不能为written

时间:2021-11-03 23:48:54
在运行程序时出现这个错误:0x00401ee7指令引用的0x00000034内存.该内存不能为written
高手能提示下错误原因么。。

12 个解决方案

#1


出现此问题,最大的可能就是出现了野指针或者内存越界

#2


楼上的说完了

#3


引用 1 楼 jixingzhong 的回复:
出现此问题,最大的可能就是出现了野指针或者内存越界

好像还有访问了不能访问的内存

#4


head.s 引导程序位置!

#5


检查一下指针吧

#6


程序问题,开始debug

#7


好像还有访问了不能访问的内存

#8


为什么我运行不了啊!!

#9


指针非法访问,野指针,越界访问。某些内存空间不可以访问

#10


你的代码贴出来,就可以知道了

#11


基本功,注意写代码规范

#12


我的代码如下,执行时总是出现,上述错误。代码是求两个字符串的最大公共子序列

#include<iostream>
#include<fstream>
#include<string>
#define  N 1000
using namespace std;

int L[N][N];
string s1,s2;
string substr="";
static int len1,len2;

void Init()
{
int i,j;
/*
ifstream infile1("str1.txt");
  if(!infile1)
  {
  cout<<"文件打开失败"<<endl;
  return;
  }
   infile1>>s1;
   infile1.close();

   ifstream infile2("str2.txt");
 
  if(!infile2)
  {
  cout<<"文件打开失败"<<endl;
  return;
  }
   infile2>>s2;
   infile2.close();
      */
cin>>s1;
cin>>s2;

   len1=s1.length();
   len2=s2.length();
   for(i=0;i<=len1;i++)
          for(j=0;j<=len2;j++)
     L[i][j]=0;
}

void  UpdateL()
{
  int i,j;
  for(i=1;i<=len1;i++)
  for(j=1;j<=len2;j++)
  if(s1[i-1]==s2[j-1])  L[i][j]=L[i-1][j-1]+1;
  else
  {
     if(L[i][j-1]>L[i-1][j])  L[i][j]=L[i][j-1];
 else  L[i][j]=L[i-1][j];
  }
 
}

void  Itercompare(int li, int lj)
{
   int k;
 
if(li==0||lj==0)
   {
   cout<<" 最长子串为:"<<substr<<endl;
   return;
   }
   else
   {
      if(s1[li-1]==s2[lj-1])// 在数组L[][]中,字符从1开始对应
  {
      k=L[li][lj]-1;
  substr[k]=s1[li-1];
  li--;
  lj--;
  cout<<"**"<<substr[k];
  Itercompare(li,lj);
  }
  else
  {
      if(L[li][lj-1]>L[li-1][lj])
  Itercompare(li,lj-1);
  else if(L[li][lj-1]<L[li-1][lj])   
  Itercompare(li-1,lj);
  else
  {
    Itercompare(li,lj-1);
Itercompare(li-1,lj);
  }
  }
   }
 
}

void  Find_Subsequence()
{
   int i,j;
   
   i=len1;
   j=len2;
   Itercompare(len1,len2);

}

int main()
{
   Init();
   UpdateL();
   /*
   int i,j;
   for(i=0;i<=len1;i++)
          for(j=0;j<=len2;j++)
     cout<<L[i][j]<<"&&&";
 */
   Find_Subsequence();

   return 0;
}

#1


出现此问题,最大的可能就是出现了野指针或者内存越界

#2


楼上的说完了

#3


引用 1 楼 jixingzhong 的回复:
出现此问题,最大的可能就是出现了野指针或者内存越界

好像还有访问了不能访问的内存

#4


head.s 引导程序位置!

#5


检查一下指针吧

#6


程序问题,开始debug

#7


好像还有访问了不能访问的内存

#8


为什么我运行不了啊!!

#9


指针非法访问,野指针,越界访问。某些内存空间不可以访问

#10


你的代码贴出来,就可以知道了

#11


基本功,注意写代码规范

#12


我的代码如下,执行时总是出现,上述错误。代码是求两个字符串的最大公共子序列

#include<iostream>
#include<fstream>
#include<string>
#define  N 1000
using namespace std;

int L[N][N];
string s1,s2;
string substr="";
static int len1,len2;

void Init()
{
int i,j;
/*
ifstream infile1("str1.txt");
  if(!infile1)
  {
  cout<<"文件打开失败"<<endl;
  return;
  }
   infile1>>s1;
   infile1.close();

   ifstream infile2("str2.txt");
 
  if(!infile2)
  {
  cout<<"文件打开失败"<<endl;
  return;
  }
   infile2>>s2;
   infile2.close();
      */
cin>>s1;
cin>>s2;

   len1=s1.length();
   len2=s2.length();
   for(i=0;i<=len1;i++)
          for(j=0;j<=len2;j++)
     L[i][j]=0;
}

void  UpdateL()
{
  int i,j;
  for(i=1;i<=len1;i++)
  for(j=1;j<=len2;j++)
  if(s1[i-1]==s2[j-1])  L[i][j]=L[i-1][j-1]+1;
  else
  {
     if(L[i][j-1]>L[i-1][j])  L[i][j]=L[i][j-1];
 else  L[i][j]=L[i-1][j];
  }
 
}

void  Itercompare(int li, int lj)
{
   int k;
 
if(li==0||lj==0)
   {
   cout<<" 最长子串为:"<<substr<<endl;
   return;
   }
   else
   {
      if(s1[li-1]==s2[lj-1])// 在数组L[][]中,字符从1开始对应
  {
      k=L[li][lj]-1;
  substr[k]=s1[li-1];
  li--;
  lj--;
  cout<<"**"<<substr[k];
  Itercompare(li,lj);
  }
  else
  {
      if(L[li][lj-1]>L[li-1][lj])
  Itercompare(li,lj-1);
  else if(L[li][lj-1]<L[li-1][lj])   
  Itercompare(li-1,lj);
  else
  {
    Itercompare(li,lj-1);
Itercompare(li-1,lj);
  }
  }
   }
 
}

void  Find_Subsequence()
{
   int i,j;
   
   i=len1;
   j=len2;
   Itercompare(len1,len2);

}

int main()
{
   Init();
   UpdateL();
   /*
   int i,j;
   for(i=0;i<=len1;i++)
          for(j=0;j<=len2;j++)
     cout<<L[i][j]<<"&&&";
 */
   Find_Subsequence();

   return 0;
}