段错误:您的程序发生段错误,可能是数组越界,这是怎么回事
 #include<stdio.h> 
int main(void)
{
    int N,p,i,j,index,temp; 
    int M;
    int input[10001];
    int cnt[10001];
    scanf("%d%d",&N,&p);
    for(i=0;i<N;i++)
    {
        scanf("%d",input[i]);
    }
    for(i=0;i<N;i++)
    {
        index=i;
        for(j=i+1;j<N-i;j++)
        {
            if(input[j]<input[index])
            index=j;
        }
        temp=input[i];
        input[i]=input[index];
        input[index]=temp;
    }

     for(i=0;i<N;i++)
     {
        M=p*input[i];
        for(j=i+1;j<N;j++)
        {
            if(M<=input[j])
            cnt[i]++;
         }
     }
     index=0;

     for(i=1;i<N-1;i++)
     {  
            if(cnt[i]>cnt[index])
            index=i;

     }
     printf("%d\n",cnt[index]);
     return 0;
}

3个回答

段错误不等于越界,这个要搞清楚什么是段错误

提示不写的很清楚了么,你的程序数组越界了,debug模式,按F5运行,看看具体蹦哪儿了应该是index值大于数组最大下标了

scanf("%d",input[i]);
应该是scanf("%d",&input[i]);
少了个&

bealing
Bealing 。。。。我只能建议你多研究研究scanf函数的本质
接近 4 年之前 回复
baidu_33690068
你喔o 为什么呢,数组不是不用加&吗
接近 4 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
OJ时没有数组和递归的代码提示发生了段错误
OJ题目描述 输入一个链表,从尾到头打印链表每个节点的值。 代码: ------ ```c /** * struct ListNode { * int val; * struct ListNode *next; * ListNode(int x) : * val(x), next(NULL) { * } * }; */ class Solution { public: vector<int> printListFromTailToHead(struct ListNode* head) { ListNode *p1, *p2, *p3; vector<int> out; p1 = head; p2 = p1->next; p1->next = NULL; //如果是单结点链表; if(p1 == NULL) { out[0] = p1->val; return out; } //非单节点列表; p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; //只有两个节点; if(p3 == NULL) { out[0] = p1->val; p2 = p1->next; out[1] = p2->val; return out; } //有三个或以上节点; while(p3 != NULL) { p3 = p2->next; p2->next = p1; p1 = p2; p2 = p3; } //现在p1指向新链表头; int i = 0; while(p1 != NULL) { out[i++] = p1->val; p1 = p1->next; } return out; } }; ``` ----- 运行结果: ------- 段错误:您的程序发生段错误,可能是数组越界,堆栈溢出(比如,递归调用层数太多)等情况引起
数组越界访问时会发生什么 尽管编译不出错
int a[ 10 ] ; 访问a[ 10 ]的话就会出现越界的错误 今天想了一下 下标访问数组可以看作指针访问的形式 也就是取( & a[ 0 ] + 10 * sizeof ( int ) ) 这个地址里的内容 然后我就想 反正数组是连续存储的 用了后面那四个字节的内存又怎么样呢 应该不会是无意义的内存吧 那为什么会出现Bug或者程序中断呢 求解
数组下标越界问题小白求解答?
我经常遇到数组下标越界问题,看不出来哪里错误,想问大家一般遇到这类问题都怎么处理? 1049. 数列的片段和(20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CAO, Peng 给定一个正数数列,我们可以从中截取任意的连续的几个数,称为片段。例如,给定数列{0.1, 0.2, 0.3, 0.4},我们有(0.1) (0.1, 0.2) (0.1, 0.2, 0.3) (0.1, 0.2, 0.3, 0.4) (0.2) (0.2, 0.3) (0.2, 0.3, 0.4) (0.3) (0.3, 0.4) (0.4) 这10个片段。 给定正整数数列,求出全部片段包含的所有的数之和。如本例中10个片段总和是0.1 + 0.3 + 0.6 + 1.0 + 0.2 + 0.5 + 0.9 + 0.3 + 0.7 + 0.4 = 5.0。 输入格式: 输入第一行给出一个不超过105的正整数N,表示数列中数的个数,第二行给出N个不超过1.0的正数,是数列中的数,其间以空格分隔。 输出格式: 在一行中输出该序列所有片段包含的数之和,精确到小数点后2位。 输入样例: 4 0.1 0.2 0.3 0.4 输出样例: 5.00 ``` package exercise; import java.util.Scanner; public class B1049 { public static void main(String[] args) { Scanner in = new Scanner(System.in); int N = in.nextInt(); String str = in.next(); String []X = new String[N]; X = (str.split(" ")); /* String[], X */ double []num = new double[N]; for (int x = 0; x < N; x++) { num[x] = Double.parseDouble(X[x]); }/*将String[]转化为double[]*/ double sum = 0; for(int i = -1; i < N-1; i++) { for (int j = i+1; j < N; j++) { sum += num[j]; } } System.out.print(sum); in.close(); } } ``` ![图片说明](https://img-ask.csdn.net/upload/201711/07/1510030639_792742.png) 显示这一行数组下标越界,不懂,费解,求解答!感激!
C++CLR编程读取Windows系统日志数组越界错误
以下为我的程序 ``` int main(array<System::String^>^ args) { //后台运行 HWND hwnd; hwnd = FindWindow("ConsoleWindowClass", NULL); if (hwnd) { ShowWindow(hwnd, SW_SHOWNORMAL); } EventLog^ log = gcnew EventLog(); //绑定应用日志 log->Log = ("Application"); EventLogEntryCollection^ myApp = log->Entries; int AppNum = myApp->Count; //绑定安全日志 log->Log = ("Security"); EventLogEntryCollection^ mySec = log->Entries; int SecuNum = mySec->Count; //绑定系统日志 log->Log = ("System"); EventLogEntryCollection^ mySys = log->Entries; int SysNum = mySys->Count; while (1) { //获取当前应用日志 log->Log = ("Application"); EventLogEntryCollection^ myApplication = log->Entries; if (myApplication->Count > AppNum) { analysis1(myApplication, AppNum); AppNum++; } else if (myApplication->Count < AppNum) { for each (EventLogEntry^ var in myApplication) { analysis2(var); } AppNum = myApplication->Count; } //获取当前安全日志 log->Log = ("Security"); EventLogEntryCollection^ mySecurity = log->Entries; if (mySecurity->Count > SecuNum) { analysis1(mySecurity, SecuNum); SecuNum++; } else if (mySecurity->Count < SecuNum) { for each (EventLogEntry^ var in mySecurity) { analysis2(var); } SecuNum = mySecurity->Count; } //获取当前系统日志 log->Log = ("System"); EventLogEntryCollection^ mySystem = log->Entries; if (mySystem->Count > SysNum) //如有新日志,则按序输出 { analysis1(mySystem, SysNum); SysNum++; } else if (mySystem->Count < SysNum) //表示日志以重置 { for each (EventLogEntry^ var in mySystem) { analysis2(var); } SysNum = mySystem->Count; } } return 0; } //解析相关的内容以及JSON封包 void analysis1(EventLogEntryCollection^ log, int n) { string type, time, sou, user, machine, cat, msg; int id; //判断查找的内容是否为空 //判断级别是否为空 if (!log[n]->EntryType.ToString()) { type = ""; } else { const char* EntryType = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->EntryType.ToString())).ToPointer(); type = EntryType; } //判断事件是否为空 if (!log[n]->TimeWritten.ToString()) { time = ""; } else { const char* TimeWritten = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->TimeWritten.ToString())).ToPointer(); time = TimeWritten; } //判断来源是否为空 if (!log[n]->Source) { sou = ""; } else { const char* Source = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->Source)).ToPointer(); sou = Source; } //判断用户是否为空 if (!log[n]->UserName) { user = ""; } else { const char* UserName = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->UserName)).ToPointer(); user = UserName; } //判断计算机名是否为空 if (!log[n]->MachineName) { machine = ""; } else { const char* MachineName = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->MachineName)).ToPointer(); machine = MachineName; } //判断任务类别是否为空 if (!log[n]->CategoryNumber.ToString()) { cat = ""; } else { const char* Category = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->CategoryNumber.ToString())).ToPointer(); cat = Category; } //判断内容是否为空 if (!log[n]->Message) { msg = ""; } else { const char* Message = (const char*)(Marshal::StringToCoTaskMemAnsi(log[n]->Message)).ToPointer(); msg = Message; } //判断事件ID是否为空 if (!log[n]->EventID) { id = NULL; } else { id = log[n]->EventID; } StringBuffer buffer; Writer<StringBuffer> Log(buffer); Log.StartObject(); Log.Key("EntryType"); Log.String(type.c_str()); Log.Key("TimeWritten"); Log.String(time.c_str()); Log.Key("Source"); Log.String(sou.c_str()); Log.Key("EventID"); Log.Int(id); Log.String("Category"); Log.Key(cat.c_str()); Log.String("UserName"); Log.Key(user.c_str()); Log.String("MachineName"); Log.Key(machine.c_str()); Log.String("Message"); Log.Key(msg.c_str()); Log.EndObject(); string LogData = buffer.GetString(); client(LogData.c_str()); } //日志重置后解析相关的内容以及JSON封包 void analysis2(EventLogEntry^ log) { string type, time, sou, user, machine, cat, msg; int id; //判断查找的内容是否为空 //判断级别是否为空 if (!log->EntryType.ToString()) { type = ""; } else { const char* EntryType = (const char*)(Marshal::StringToCoTaskMemAnsi(log->EntryType.ToString())).ToPointer(); type = EntryType; } //判断事件是否为空 if (!log->TimeWritten.ToString()) { time = ""; } else { const char* TimeWritten = (const char*)(Marshal::StringToCoTaskMemAnsi(log->TimeWritten.ToString())).ToPointer(); time = TimeWritten; } //判断来源是否为空 if (!log->Source) { sou = ""; } else { const char* Source = (const char*)(Marshal::StringToCoTaskMemAnsi(log->Source)).ToPointer(); sou = Source; } //判断用户是否为空 if (!log->UserName) { user = ""; } else { const char* UserName = (const char*)(Marshal::StringToCoTaskMemAnsi(log->UserName)).ToPointer(); user = UserName; } //判断计算机名是否为空 if (!log->MachineName) { machine = ""; } else { const char* MachineName = (const char*)(Marshal::StringToCoTaskMemAnsi(log->MachineName)).ToPointer(); machine = MachineName; } //判断任务类别是否为空 if (!log->CategoryNumber.ToString()) { cat = ""; } else { const char* Category = (const char*)(Marshal::StringToCoTaskMemAnsi(log->CategoryNumber.ToString())).ToPointer(); cat = Category; } //判断内容是否为空 if (!log->Message) { msg = ""; } else { const char* Message = (const char*)(Marshal::StringToCoTaskMemAnsi(log->Message)).ToPointer(); msg = Message; } //判断事件ID是否为空 if (!log->EventID) { id = NULL; } else { id = log->EventID; } StringBuffer buffer; Writer<StringBuffer> Log(buffer); Log.StartObject(); Log.Key("EntryType"); Log.String(type.c_str()); Log.Key("TimeWritten"); Log.String(time.c_str()); Log.Key("Source"); Log.String(sou.c_str()); Log.Key("EventID"); Log.Int(id); Log.String("Category"); Log.Key(cat.c_str()); Log.String("UserName"); Log.Key(user.c_str()); Log.String("MachineName"); Log.Key(machine.c_str()); Log.String("Message"); Log.Key(msg.c_str()); Log.EndObject(); string LogData = buffer.GetString(); client(LogData.c_str()); } ``` 在运行此程序时如果系统日志的属性设置为按需要覆盖事件(旧事件优先),如下图: ![图片说明](https://img-ask.csdn.net/upload/201906/28/1561705804_188273.png) 一旦日志很多,在运行analysis1函数查找内容时,会出现数值越界的问题,如下图: ![图片说明](https://img-ask.csdn.net/upload/201906/28/1561706396_761614.png) 原因是按需覆盖是删一条加一条,在执行analysis1函数查找内容的时候,日志突然发生覆盖事件,而且是一大片删除旧日志,导致这个时候的下标改变了(感觉运行速率太好了也不行),使得程序崩溃 有什么好的解决办法吗?崩溃重置程序的话也可以
linux AWK报越界错误,但是程序能正常运行,为啥?
在shell脚本中: arr=(`awk 'NR==2{for(i=1;i<=$infoo1;i++)printf $i" "}' $1`) // 我用awk读取一个文本的第二行,并将每个域的元素依次赋值给数组arr[],$1是 shell从命令行传入的参数,即我读取的文本的路径,这个文本很简单,第二行内容如下: p.jpg-1 p.jpg-2 p.jpg-3 p.jpg-4 p.jpg-5 p.jpg-6 p.jpg-7 请问,为什么终端中会给出 awk: program limit exceeded: maximum number of fields size=32767 FILENAME="t.txt" FNR=3 NR=3 这样的错误?我觉得不存在任何越界的行为啊? 请各位大大说说,还有就是程序能正常运行,赋值这些都行,就是会多这么一句错误提示,我很费解
初学java遇到疑惑,数组下标越界,求解答!
一个学生考试成绩录入程序的模块化设计,在编译时出现了数组下标越界 错误提示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0;at Ch3Demo7.main(Ch3Demo7.java:26) ``` class Ch3Demo7 //example { public static double input(String s)//成绩输入方法 { return Double.parseDouble(s); } public static boolean isLegal(double i)//判断输入是否合法 { if ((0<=i)&&(i<=100)) { return true; } else return false; } public static double score(double i,double j)//计算总成绩 { return (i*0.3+j*0.7); } public static void output(String name,double score,char g)//输出 { System.out.println("学生"+name+"的总分为:"+score+ " 等级是:"+g); } public static void main(String[] args) { String name = args[0]; //(提示错误所在行)命令行第一个参数是姓名 double rs = input(args[1]); //第二个参数是平时成绩 double ts = input(args[2]); //第三个参数是考试成绩 double fs = 0; char grade = 'A'; if (isLegal(rs) && isLegal(ts)) { fs = score(rs,ts); if (fs<60) { grade = 'D'; } else if (fs<75) { grade = 'C'; } else if (fs <85) { grade = 'B'; } output(name,fs,grade); } else System.out.println("输入数据错误"); } } ```
请检查是否存在数组越界非法访问等情况
写出一个程序,接受一个有字母和数字以及空格组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。 BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in)); String str = ""; Scanner sc=new Scanner(System.in); while((str=stdin.readLine())!=null) { String word = sc.next(); char ch[] = str.toUpperCase().toCharArray(); word = word.toUpperCase(); int count=0; for(int i=0;i<ch.length;i++) { if(ch[i] == word.charAt(0)) { count++; } } System.out.println(count); } 请问哪里出现数组越界错误
C++程序在vs2010下运行出现错误:HEAP CORRUPTION DETECTED ........
我的c++程序之前在vc++6.0环境下运行正常,现在在VS2010下调试出现错误:HEAP CORRUPTION DETECTED......,经查询,可能是在Myfile.cpp中使用了new.delete申请了内存空间,导致内存操作越界,在该程序段加了 ASSERT(_CrtCheckMemory())后没有出现那个错误提示,但运行后对话框窗口不见了,实际上不能成功,由于我是新手,初次到CSDN中来求助,还望前辈高手不吝赐教,小弟万分感谢。其中的部分代码如下: int ChangeNameExtension( CString s1) { int i,j; char *ExtendedName; USES_CONVERSION; int n = s1.GetLength(); char *temp = new char(n*2+1); strcpy(temp,(LPCTSTR)s1); if ((ExtendedName=strchr(temp,'.'))==NULL) { //AfxMessageBox("文件扩展名有误!"); return -1; } ExtendedName++; return 0; } int ChangeFileName( CString s1)//return:-1, 0, 1 { int i,j; char *ExtendedName; USES_CONVERSION; int n = s1.GetLength(); char *temp = new char(n*2+1); strcpy(temp,(LPCTSTR)s1); // ASSERT(_CrtCheckMemory()); if ((ExtendedName=strchr(temp,'.'))==NULL) { //AfxMessageBox("文件扩展名有误!"); delete[] temp; return -1; } ExtendedName--; //判断文件名是否符合递增要求,即是否有数字。 if (*ExtendedName<'0' || *ExtendedName>'9') { delete[] temp; return -1; } for(i=0;i<=ExtendedName-s1;i++) if(*(ExtendedName-i)<'9') { (*(ExtendedName-i))++; j = i - 1; while(j>=0) { (*(ExtendedName-j)) = '0'; j--; } delete[] temp; return 1; } delete[] temp; return 0; }
急急急,用gdb调试程序出现段错误
出错的函数如下: NodeTp*Crt(int n,char b[],char jj[]) { int i; NodeTp *p,*h,*last; CreateNode(h); last=h; for(i=0;i<n;i++) { if(jj[i]=='2') { CreateNode(p); if(b[i]=='1') { p->pf[0]=a[i][0]; p->pf[1]=a[i][1]; p->pf[2]=a[i][2]; p->SA=0; last->next=p; last=p; } else { p->SA=2*a[i][1]; p->pf[0]=a[i][2]; p->pf[1]=a[i][1]; p->pf[2]=a[i][0]; last->next=p; last=p; } } else {if((jj[i]=='1')&&(b[i]=='1')) { CreateNode(p); p->SA=2*a[i][1]; p->pf[0]=a[i][2]; p->pf[1]=a[i][1]; p->pf[2]=a[i][0]; last->next=p; last=p; } else {if((jj[i]=='0')&&(b[i]=='1')) { CreateNode(p); p->pf[0]=a[i][0]; p->pf[1]=a[i][1]; p->pf[2]=a[i][2]; p->SA=0; last->next=p; last=p; } else {if((jj[i]=='1')&&(b[i]=='0')) { CreateNode(p); p->pf[0]=1; p->pf[1]=1; p->pf[2]=1; p->SA=0; last->next=p; last=p; } else { CreateNode(p); p->pf[0]=1; p->pf[1]=1; p->pf[2]=1; p->SA=0; last->next=p; last=p; } } } } } last->next=NULL; return h; } 用gdb调试出现: Program received signal SIGSEGV, Segmentation fault. 0x080491c4 in Crt (n=12, b=0x3e680000 <Address 0x3e680000 out of bounds>, jj=0x804dfd8 "200111101100") at unconsider2.c:231 if(b[i]=='1') 根据gdb的提示信息说是b数组越界访问,但总找不出具体错误在哪,还请大神指教!
Java程序出现错误 数组越界 (刚学不久,不知道哪里错了,求大神指导!!!)
public class Score{ public static void main(String[] args){ int[][] score=new int[][]{{88,90,90},{70,60,70},{54,88,50},{60,75,83}}; double ave1[]=new double[4]; for(int i=0;i<4;i++){ for(int j=0;j<3;i++){ ave1[i]+=score[i][j]; } System.out.println(ave1[i]/3+" "); } double ave2[]=new double[3]; for(int n=0;n<3;n++){ for(int m=0;m<4;m++){ ave2[n]+=score[m][n]; } System.out.println(ave2[n]/4+" "); } } } //出现这样的错误 Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 at Score.main(Score.java:8)
大家帮看下下边这段代码:模版函数内部在delete释放空间是出错
``` #ifndef _MERGE_H #define _MERGE_H #include <algorithm> #include <iterator> using namespace std; /*升序版合并*/ template<typename Iterator> void merge(Iterator p, Iterator q, Iterator r) { typedef typename iterator_traits<Iterator>::value_type T; long i, j, n1, n2; n1 = distance(p, q); n2 = distance(q, r); T *L = new T(n1), *R = new T(n2);//分配左右临时数组L和R的空间 copy(p, q, L); copy(q, r, R);//调试中发现是copy这句发生了内存越界或者其他错误 Iterator k = p; i = j = 0; while (i<n1&&j<n2) { if (L[i] < R[j]) *(k++) = L[i++]; else *(k++) = R[j++]; } if (i < n1) copy(L + i, L + n1, k); if (j < n2) copy(R + j, R + n2, k); delete[]L;//调试到delete出错 delete[]R; } #endif /*_MERGE_H*/在这里书写代码片 ``` 程序运行到delete,出发断点,出发未知错误,其转到: ``` extern "C" _CRTIMP int __cdecl _CrtIsValidHeapPointer( const void * pUserData ) { if (!pUserData) return FALSE; if (!_CrtIsValidPointer(pHdr(pUserData), sizeof(_CrtMemBlockHeader), FALSE)) return FALSE; return HeapValidate( _crtheap, 0, pHdr(pUserData) ); }在这里书写代码片 ``` 这个问题如何解决呢,还有在模版函数内部如何开辟内存空间及释放空间。
PATB 1025 反转链表段错误问题
1025. 反转链表 (25) 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 给定一个常数K以及一个单链表L,请编写程序将L中每K个结点反转。例如:给定L为1→2→3→4→5→6,K为3,则输出应该为3→2→1→6→5→4;如果K为4,则输出应该为4→3→2→1→5→6,即最后不到K个元素不反转。 输入格式: 每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址、结点总个数正整数N(<= 105)、以及正整数K(<=N),即要求反转的子链结点的个数。结点的地址是5位非负整数,NULL地址用-1表示。 接下来有N行,每行格式为: Address Data Next 其中Address是结点地址,Data是该结点保存的整数数据,Next是下一结点的地址。 输出格式: 对每个测试用例,顺序输出反转后的链表,其上每个结点占一行,格式与输入相同。 输入样例: 00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218 输出样例: 00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1 http://blog.csdn.net/qq_38181539/article/details/70842202 https://www.patest.cn/contests/pat-b-practise/1025 为什么一提交就全是段错误,数组好像没有越界呀,这是为什么?
大神们帮忙看看这个堆栈调用怎么回事
![图片说明](https://img-ask.csdn.net/upload/201705/14/1494751925_249016.jpg)this指针错误,是不是数组越界了?程序停留在一维数组的首地址赋值给二维数组的首地址的地方。
c plus程序在不同系统运行,出现问题
我的程序,在Windows下code blocks不存在问题,在linux条件下,报段错误,数组越界,但是core文件定位看不懂,求解![图片说明](https://img-ask.csdn.net/upload/201703/23/1490227682_689233.png)
在leetcode上提交zigzag后,一直爆出RE错误,感觉应该没有越界?
RT,原题在这:https://oj.leetcode.com/problems/zigzag-conversion/ 很简单的一个程序,就是横排字符串改成折线字符串,然后横排输出 我的程序在VS2012上 debug模式下自己测试没找到错误,但是提交上去之后, 就报Runtime-error,百思不得其解,求大神指教解救! ``` char *convert(char *s, int nRows) { long len=strlen(s); char *result=NULL; long i,j,k; i=1;j=0;k=0; result=(char *)malloc((len+1)); if(nRows<=1||len==0) {return s;} else { if(result!=NULL) { for(i=1,j=0,k=0;i<=nRows;i++)//这个是判断要求折成几行的,就循环几次 { for(k=i-1;k<len;k+=(nRows*2-2))//每行的循环,从最左侧元素开始往后计算 { result[j++]=s[k]; if(i>1 && i<nRows) { if((k+nRows*2-i*2)<len) { result[j++]=s[k+nRows*2-i*2];//每一行的折线元素的位置是之前的直线元 //素位置加上nRows*2-i*2,这个公式没错 } } } } result[j]='\0'; } return result; } } ``` 当前显示输入是 "A",1 没有给出输出,错误信息只有RE,别的都没有
Accelerated c++ CH13中的程序
就是句柄类那个程序 ![图片说明](https://img-ask.csdn.net/upload/201603/02/1456924341_792306.png) 说的错误我上网查了下 说是内存越界访问 但是我Debug错误提示指的是析构函数那行,在我看来,具体行为就是根据句柄类中的指针指向的是Core还是Grad类来调用其相应的析构函数,和越界没什么关系啊。 结果也没问题。
请问下Linux下C++的正则表达式匹配全部字符的时候为什么会报错?
``` regex re("<form[\\S\\s]+method=\"get\"[\\S\\s]+/form>"); for (sregex_iterator it(html.cbegin(), html.cend(), re), end; it != end; it++, n++) continue; ``` 程序是在Ubantu下编译的,html是string对象,存储的是网页源代码,网页源代码是用wget命令下载的,然后读取到html对象中,这段代码目的是为了匹配网页源代码中的get方法,用以上的正则表达式匹配www.hao123.com网页源代码时候会出现Segmentation fault错误,调试之后定位出来问题出在"[\\S\\s]+"这个正则表达式语句上,这个语句是为了匹配所有的字符,求解各位为什么会出现越界的问题?如果要匹配所有字符的话,C++中的正则表达式应该怎么使用呢?
C++ 关于指针和delete的问题,delete总是报错
近期想仔细了解一下C++里的指针、内存分配的问题,所以想验证一下,当一个指针被delete之后的内存会发生什么,所以想尝试一下: ``` int main() { int *p = new int; int *p2; p2 = p; delete p2; system("pause"); return 0; } ``` 执行delete p2时报错,HEAP CORRUPTION DETECTED:after a normal block.... 但是如果把delete语句删掉,会在程序结束的时候报错:内存访问冲突。 不是很能理解为什么。 逻辑上: 给p分配了一个int的内存,p指向这个内存。然后p2 = p,p2也可以指向这个内存。然后delete p2,释放p2指向的内存。 我想过可能的错误:p和p2指向了同一个内存,在释放的时候会产生混乱。但是,为什么会产生这个混乱?p2释放之后,p顶多变成野指针吧(我是这么想的。 然后我把delete p2删除之后,在程序结束的时候,会报一个访存冲突的错误。我想是不是因为p和p2指向同一个内存,在程序结束的时候释放内存,会重复释放,因此报错。于是我改成: ``` int main() { int *p = new int; int *p2; p2 = p; p = p + 1; //delete p2; system("pause"); return 0; } ``` 但是依旧报错。 不是很懂了。求好心人帮忙看看~ **第二天再运行一遍就好了。我也不是很懂了orzz。但是还有新的问题,见下:** ----------------------------------华丽分割线------------------------------------- 其实最原始我的本意是想看看,给一个指针分配一块内存,delete后会发生什么。所以写了如下: ``` #include<iostream> #include<string> using namespace std; int* InitIntWithoutDelete() { int *p = new int; cout << "initwithoutdelete.p:" << p << endl; for (int i = 0; i < 4; i++) { p[i] = i; } int *p2 = p; return p; } int* InitIntWithDelete() { int *p = new int; for (int i = 0; i < 4; i++) { p[i] = i; } int *p2 = p; delete p2; return p; } int main() { int *p; p = InitIntWithoutDelete(); for (int i = 0; i < 4; i++) { cout << p[i] << endl; } system("pause"); return 0; } ``` 运行时一直没错,但是程序退出的时候,会报错,中断进去,程序断在xlocale: ``` ~locale() _NOEXCEPT { // destroy the object if (_Ptr != 0) delete _Ptr->_Decref(); } ``` 然后点继续,弹出对话框是说: ![图片说明](https://img-ask.csdn.net/upload/201610/16/1476590620_92551.png) 感觉是程序结束,回收内存的时候越界或者溢出啥的了。 **所以想问: 1.为什么会出现这个现象?错误的地方在哪里呢? 2.说起来,想问一下,像这种,我是通过一个函数,返回了一个指向堆内存的指针,那我要释放这个堆,应该怎么释放呢?都说new和delete最好配对,但是我在函数InitIntWithoutDelete()里面new的指针,因为要是要返回它的值,所以在返回之前没法delete吧,一旦delete了,好像现在C++是会自动把这个指针变成x00008123。那这个new就没法有对应的delete了。我一开始猜想的是在函数外部delete,比如在上面那一段中:** ``` int *p = InitIntWithoutDelete(); delete p; ``` **在delete语句中就会报错。** 最后就是别的奇奇怪怪的问题了: 我看程序退出报错,就在system("pause")处设了断点。运行到断点的时候,直接点了“继续”,程序正常退出。 但是后来,就算有断点,退出也依然报错了。 我记得我以前也碰到过,就是 **设置断点可以运行,但是去掉断点就越界啥的错误了。为啥?** TAT,香菇,求好心人解答,十分感谢!~
数字字面量的存储问题
看到一种说法除了字符串字面量存储在常量区,其他的字面量一般会称为立即数被包含在程序生成的代码中。 但是这样一段代码 printf("%f\n", 5) 用gcc编译器的时候会输出0,用vc出现错误(因为越界访问)。 看到一种说法,假设能越界访问,因为其放在静态区,前面补0,运用double计算以后是一个非常小的值,等于0。很有道理,但是按照大众说法,内存划分五类,5为什么不放在常量区呢。 而且五个区的话静态常量放在哪个区。 感觉一种常量区与全局区(静态区)是一个区而的说法更可行,符合实际啊。 没有C币,恳请赐教,大家共同讨论进步,多谢。
130 个相见恨晚的超实用网站,一次性分享出来
相见恨晚的超实用网站 持续更新中。。。
我花了一夜用数据结构给女朋友写个H5走迷宫游戏
起因 又到深夜了,我按照以往在csdn和公众号写着数据结构!这占用了我大量的时间!我的超越妹妹严重缺乏陪伴而 怨气满满! 而女朋友时常埋怨,认为数据结构这么抽象难懂的东西没啥作用,常会问道:天天写这玩意,有啥作用。而我答道:能干事情多了,比如写个迷宫小游戏啥的! 当我码完字准备睡觉时:写不好别睡觉! 分析 如果用数据结构与算法造出东西来呢? ...
对计算机专业来说学历真的重要吗?
我本科学校是渣渣二本,研究生学校是985,现在毕业五年,校招笔试、面试,社招面试参加了两年了,就我个人的经历来说下这个问题。 这篇文章很长,但绝对是精华,相信我,读完以后,你会知道学历不好的解决方案,记得帮我点赞哦。 先说结论,无论赞不赞同,它本质就是这样:对于技术类工作而言,学历五年以内非常重要,但有办法弥补。五年以后,不重要。 目录: 张雪峰讲述的事实 我看到的事实 为什么会这样 ...
字节跳动视频编解码面经
三四月份投了字节跳动的实习(图形图像岗位),然后hr打电话过来问了一下会不会opengl,c++,shador,当时只会一点c++,其他两个都不会,也就直接被拒了。 七月初内推了字节跳动的提前批,因为内推没有具体的岗位,hr又打电话问要不要考虑一下图形图像岗,我说实习投过这个岗位不合适,不会opengl和shador,然后hr就说秋招更看重基础。我当时想着能进去就不错了,管他哪个岗呢,就同意了面试...
win10系统安装教程(U盘PE+UEFI安装)
一、准备工作 u盘,电脑一台,win10原版镜像(msdn官网) 二、下载wepe工具箱 极力推荐微pe(微pe官方下载) 下载64位的win10 pe,使用工具箱制作启动U盘打开软件, 选择安装到U盘(按照操作无需更改) 三、重启进入pe系统 1、关机后,将U盘插入电脑 2、按下电源后,按住F12进入启动项选择(技嘉主板是F12) 选择需要启...
程序员必须掌握的核心算法有哪些?
由于我之前一直强调数据结构以及算法学习的重要性,所以就有一些读者经常问我,数据结构与算法应该要学习到哪个程度呢?,说实话,这个问题我不知道要怎么回答你,主要取决于你想学习到哪些程度,不过针对这个问题,我稍微总结一下我学过的算法知识点,以及我觉得值得学习的算法。这些算法与数据结构的学习大多数是零散的,并没有一本把他们全部覆盖的书籍。下面是我觉得值得学习的一些算法以及数据结构,当然,我也会整理一些看过...
Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)
最近翻到一篇知乎,上面有不少用Python(大多是turtle库)绘制的树图,感觉很漂亮,我整理了一下,挑了一些我觉得不错的代码分享给大家(这些我都测试过,确实可以生成) one 樱花树 动态生成樱花 效果图(这个是动态的): 实现代码 import turtle as T import random import time # 画樱花的躯干(60,t) def Tree(branch, ...
大学四年自学走来,这些私藏的实用工具/学习网站我贡献出来了
大学四年,看课本是不可能一直看课本的了,对于学习,特别是自学,善于搜索网上的一些资源来辅助,还是非常有必要的,下面我就把这几年私藏的各种资源,网站贡献出来给你们。主要有:电子书搜索、实用工具、在线视频学习网站、非视频学习网站、软件下载、面试/求职必备网站。 注意:文中提到的所有资源,文末我都给你整理好了,你们只管拿去,如果觉得不错,转发、分享就是最大的支持了。 一、电子书搜索 对于大部分程序员...
《奇巧淫技》系列-python!!每天早上八点自动发送天气预报邮件到QQ邮箱
将代码部署服务器,每日早上定时获取到天气数据,并发送到邮箱。 也可以说是一个小人工智障。 思路可以运用在不同地方,主要介绍的是思路。
致 Python 初学者
欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多 Python 的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触 python 这门编程语言,从2009年开始单一使用 python 应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的 Python 初学者走出困境、快速成长。希望我的经验能真正帮到你
Ol4网格生成以及优化
概述 先描述一下大致场景:以0.05为单元格大小生成网格,并在地图上绘制,绘制的时候需要区分海陆。本文以此需求为契机,简单描述一下该需求的实现以及如何来优化。 效果 实现 优化前 var source = new ol.source.Vector({ features: [] }); var vector = new ol.layer.Vector({ source...
11月19日科技资讯|华为明日发布鸿蒙整体战略;京东宣告全面向技术转型;Kotlin 1.3.60 发布
「极客头条」—— 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧。扫描上方二维码进入 CSDN App 可以收听御姐萌妹 Style 的人工版音频哟。 一分钟速览新闻点! 6G 专家组成员:速率是 5G 的 10 至 100 倍,预计 2030 年商用 雷军:很多人多次劝我放弃WPS,能坚持下来并不是纯粹的商业决定 ...
C语言魔塔游戏
很早就很想写这个,今天终于写完了。 游戏截图: 编译环境: VS2017 游戏需要一些图片,如果有想要的或者对游戏有什么看法的可以加我的QQ 2985486630 讨论,如果暂时没有回应,可以在博客下方留言,到时候我会看到。 下面我来介绍一下游戏的主要功能和实现方式 首先是玩家的定义,使用结构体,这个名字是可以自己改变的 struct gamerole { char n...
iOS Bug 太多,苹果终于坐不住了!
开源的 Android 和闭源的 iOS,作为用户的你,更偏向哪一个呢? 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 毋庸置疑,当前移动设备操作系统市场中,Android 和 iOS 作为两大阵营,在相互竞争的同时不断演进。不过一直以来,开源的 Android 吸引了无数的手机厂商涌入其中,为其生态带来了百花齐放的盛景,但和神秘且闭源的 iOS 系统相比,不少网友...
Python语言高频重点汇总
Python语言高频重点汇总 GitHub面试宝典仓库 回到首页 目录: Python语言高频重点汇总 目录: 1. 函数-传参 2. 元类 3. @staticmethod和@classmethod两个装饰器 4. 类属性和实例属性 5. Python的自省 6. 列表、集合、字典推导式 7. Python中单下划线和双下划线 8. 格式化字符串中的%和format 9. 迭代器和生成器 10...
究竟你适不适合买Mac?
我清晰的记得,刚买的macbook pro回到家,开机后第一件事情,就是上了淘宝网,花了500元钱,找了一个上门维修电脑的师傅,上门给我装了一个windows系统。。。。。。 表砍我。。。 当时买mac的初衷,只是想要个固态硬盘的笔记本,用来运行一些复杂的扑克软件。而看了当时所有的SSD笔记本后,最终决定,还是买个好(xiong)看(da)的。 已经有好几个朋友问我mba怎么样了,所以今天尽量客观...
Python爬虫爬取淘宝,京东商品信息
小编是一个理科生,不善长说一些废话。简单介绍下原理然后直接上代码。 使用的工具(Python+pycharm2019.3+selenium+xpath+chromedriver)其中要使用pycharm也可以私聊我selenium是一个框架可以通过pip下载 pip installselenium -ihttps://pypi.tuna.tsinghua.edu.cn/simple/ ...
程序员写了一个新手都写不出的低级bug,被骂惨了。
这种新手都不会范的错,居然被一个工作好几年的小伙子写出来,差点被当场开除了。
Java工作4年来应聘要16K最后没要,细节如下。。。
前奏: 今天2B哥和大家分享一位前几天面试的一位应聘者,工作4年26岁,统招本科。 以下就是他的简历和面试情况。 基本情况: 专业技能: 1、&nbsp;熟悉Sping了解SpringMVC、SpringBoot、Mybatis等框架、了解SpringCloud微服务 2、&nbsp;熟悉常用项目管理工具:SVN、GIT、MAVEN、Jenkins 3、&nbsp;熟悉Nginx、tomca...
2020年,冯唐49岁:我给20、30岁IT职场年轻人的建议
点击“技术领导力”关注∆每天早上8:30推送 作者|Mr.K 编辑| Emma 来源|技术领导力(ID:jishulingdaoli) 前天的推文《冯唐:职场人35岁以后,方法论比经验重要》,收到了不少读者的反馈,觉得挺受启发。其实,冯唐写了不少关于职场方面的文章,都挺不错的。可惜大家只记住了“春风十里不如你”、“如何避免成为油腻腻的中年人”等不那么正经的文章。 本文整理了冯...
程序员该看的几部电影
1、骇客帝国(1999) 概念:在线/离线,递归,循环,矩阵等 剧情简介: 不久的将来,网络黑客尼奥对这个看似正常的现实世界产生了怀疑。 他结识了黑客崔妮蒂,并见到了黑客组织的首领墨菲斯。 墨菲斯告诉他,现实世界其实是由一个名叫“母体”的计算机人工智能系统控制,人们就像他们饲养的动物,没有自由和思想,而尼奥就是能够拯救人类的救世主。 可是,救赎之路从来都不会一帆风顺,到底哪里才是真实的世界?如何...
蓝桥杯知识点汇总:基础知识和常用算法
文章目录基础语法部分:算法竞赛常用API:算法部分数据结构部分 此系列包含蓝桥杯绝大部分所考察的知识点,以及真题题解~ 基础语法部分: 备战蓝桥杯java(一):一般输入输出 和 快速输入输(BufferedReader&amp;BufferedWrite) 备战蓝桥杯java(二):java编程规范和常用数据类型 备战蓝桥杯java(三):常用功能符以及循环结构和分支结构 备战蓝桥杯java(四...
作为一个程序员,CPU的这些硬核知识你必须会!
CPU对每个程序员来说,是个既熟悉又陌生的东西? 如果你只知道CPU是中央处理器的话,那可能对你并没有什么用,那么作为程序员的我们,必须要搞懂的就是CPU这家伙是如何运行的,尤其要搞懂它里面的寄存器是怎么一回事,因为这将让你从底层明白程序的运行机制。 随我一起,来好好认识下CPU这货吧 把CPU掰开来看 对于CPU来说,我们首先就要搞明白它是怎么回事,也就是它的内部构造,当然,CPU那么牛的一个东...
@程序员,如何花式构建线程?
作者 |曾建责编 | 郭芮出品 | CSDN(ID:CSDNnews)在项目和业务的开发中,我们难免要经常使用线程来进行业务处理,使用线程可以保证我们的业务在相互处理之间可以保证原子性...
破14亿,Python分析我国存在哪些人口危机!
一、背景 二、爬取数据 三、数据分析 1、总人口 2、男女人口比例 3、人口城镇化 4、人口增长率 5、人口老化(抚养比) 6、各省人口 7、世界人口 四、遇到的问题 遇到的问题 1、数据分页,需要获取从1949-2018年数据,观察到有近20年参数:LAST20,由此推测获取近70年的参数可设置为:LAST70 2、2019年数据没有放上去,可以手动添加上去 3、将数据进行 行列转换 4、列名...
实现简单的轮播图(单张图片、多张图片)
前言 刚学js没多久,这篇博客就当做记录了,以后还会完善的,希望大佬们多多指点。ps:下面出现的都是直接闪动,没有滑动效果的轮播图。 单张图片的替换 · ...
强烈推荐10本程序员在家读的书
很遗憾,这个春节注定是刻骨铭心的,新型冠状病毒让每个人的神经都是紧绷的。那些处在武汉的白衣天使们,尤其值得我们的尊敬。而我们这些窝在家里的程序员,能不外出就不外出,就是对社会做出的最大的贡献。 有些读者私下问我,窝了几天,有点颓丧,能否推荐几本书在家里看看。我花了一天的时间,挑选了 10 本我最喜欢的书,你可以挑选感兴趣的来读一读。读书不仅可以平复恐惧的压力,还可以对未来充满希望,毕竟苦难终将会...
Linux自学篇——linux命令英文全称及解释
man: Manual 意思是手册,可以用这个命令查询其他命令的用法。 pwd:Print working directory 意思是密码。 su:Swith user 切换用户,切换到root用户 cd:Change directory 切换目录 ls:List files 列出目录下的文件 ps:Process Status 进程状态 mkdir:Make directory ...
Python实战:抓肺炎疫情实时数据,画2019-nCoV疫情地图
今天,群里白垩老师问如何用python画武汉肺炎疫情地图。白垩老师是研究海洋生态与地球生物的学者,国家重点实验室成员,于不惑之年学习python,实为我等学习楷模。先前我并没有关注武汉肺炎的具体数据,也没有画过类似的数据分布图。于是就拿了两个小时,专门研究了一下,遂成此文。
疫情数据接口api
返回json示例 { "errcode":0,//0标识接口正常 "data":{ "date":"2020-01-30 07:47:23",//实时更新时间 "diagnosed":7736,//确诊人数 "suspect":12167,//疑是病例人数 "death":170,//死亡人数 "cur...
相关热词 c# 为空 判断 委托 c#记事本颜色 c# 系统默认声音 js中调用c#方法参数 c#引入dll文件报错 c#根据名称实例化 c#从邮件服务器获取邮件 c# 保存文件夹 c#代码打包引用 c# 压缩效率
立即提问