C++链表释放内存问题,总是引起内存泄漏

对于
struct whatever
{
int a;
whatever * next;
};
list[whatever * ] A=new list[whatever * ];
list[list [ whatever * ]]B;
A.push_back(...);
A.push_back(...);
B.push_back(A);

(打不出来<>,所以用[]代替了。。。)
来说:这种应该怎么释放内存?
如果delete A;是不是只是把A中存放的指针删掉了,而没有删掉指针指向的内存?
如果
for(auto i=A.begin();i!=A.end();i++)
{
whatever *a=*i;
whatever *p1;
whatever *p2;
p1=p2=a;
while(p2->next!=NULL)
{
p1=p2->parent;
delete p2;
p2=p1;
}
p2=p1=NULL;
}
这样的话是不是把A中的内存和指针都清除了?那B中的指针是会变成野指针么?
因为需要频繁插入和删除,所以必须需要使用list。。。

2个回答

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
C++链表释放内存问题,总是引起内存泄漏

对于 struct whatever { int a; whatever * next; }; list[whatever * ] A=new list[whatever * ]; list[list [ whatever * ]]B; A.push_back(...); A.push_back(...); B.push_back(A); (打不出来<>,所以用[]代替了。。。) 来说:这种应该怎么释放内存? 如果delete A;是不是只是把A中存放的指针删掉了,而没有删掉指针指向的内存? 如果 for(auto i=A.begin();i!=A.end();i++) { whatever *a=*i; whatever *p1; whatever *p2; p1=p2=a; while(p2->next!=NULL) { p1=p2->parent; delete p2; p2=p1; } p2=p1=NULL; } 这样的话是不是把A中的内存和指针都清除了?那B中的指针是会变成野指针么? 因为需要频繁插入和删除,所以必须需要使用list。。。

C语言释放链表节点出现错误

``` current = head; while (current != NULL) { current = head; head = current->next; free(current); } ``` 这是书上的一段代码,但是程序在执行过程中却无法正常停止,出现报错,请问是什么原因? 但是将这段代码调换一下顺序后却能正常运行: ``` current = head; while (current != NULL) { head = current->next; free(current); current = head; } ```

关于链表内存释放的问题

在VC++中 我的代码如下: List<A> A_list; A* a = new A(); A_list.push_back(*a); List<A>::iterator it = A_list.begin(); A_list.erase(it); 请问被new出来的a有没有得到释放?

C语言链表数据输入问题

有链表指针p1,想向结构体中的结构体时间中的变量日输入数值,如何写代码?

为什么我这【链表】 内存释放不了?

程序可以运行,可以输入,可以输出,但是到了释放内存的时候就有问题了 求大神指正。 ``` #include <stdio.h> #include <stdlib.h> typedef struct node{ int data; struct node *next; }*LPNODE; LPNODE CreateList(int n); void ShowList(LPNODE lphead); int main(void) { LPNODE lpHead, temp, current; int num; puts("请问您需要几个节点?"); scanf_s("%d", &num); lpHead = CreateList(num); ShowList(lpHead); //释放链表 current = lpHead; while (current != NULL) { temp = current->next; free(current); current = temp; } return 0; } LPNODE CreateList(int n) { int _data, count = 0; LPNODE lpHead = NULL; LPNODE current, prev; lpHead = current = prev = (LPNODE)malloc(sizeof(LPNODE)); puts("请输入一个数字:"); while (scanf_s("%d", &_data)) { current = (LPNODE)malloc(sizeof(LPNODE)); prev->next = current; current->data = _data; current->next = NULL; prev = current; count++; //控制循环 if (count < n) puts("请输入下一个数字"); else { puts("输入结束!"); break; } } return lpHead; } void ShowList(LPNODE lpHead) { LPNODE p = lpHead->next; while (p != NULL) { printf("%d ", p->data); p = p->next; } } ```

用函数怎么给链表分配内存?

因为我身边也没有什么太会的人,上网查的也没有写得详细; 最近刚好在做链表的题目,所以把问题整理出来,希望有人看到能帮我解答一下; 首先你们先看看这三张图 > ![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303193328834.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTcyOTIxMg==,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303193341877.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTcyOTIxMg==,size_16,color_FFFFFF,t_70)![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303193350835.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80NTcyOTIxMg==,size_16,color_FFFFFF,t_70) **问题一**:我在GCC的编译器写了像图三一样的代码,有了这样的提示," data *&p"是什么意思?为什么和"data *p"是同一种类型? ~~是像p=&a?像指针那样,指针的指针?首地址?什么鬼?不懂!~~ (百度什么的找不到较为详细的结论。。。。 >![在这里插入图片描述](https://img-blog.csdnimg.cn/20200303194344494.jpg) **问题二**:图一和图二进行比较得到的,没有分配内存,就算调用分配了,也没有用?为什么? (如果主函数和子函数都有分配内存,结果赋值成功,但是头节点的地址变了,就是 | 赋值 | 主函数有分配内存 | 主函数没有分配内存| |--|--|--| | 子函数有分配内存 | 成功 | 失败 | | 子函数没有分配内存 | 成功 | 失败 | ) (这是我主观的结论。。。。大佬求解释!!!!

c语言 free() 需要释放分配结构里面分配的结构内存么-贪吃蛇-链表

![结构如下](https://img-ask.csdn.net/upload/201907/09/1562648615_804996.png) ![这样分配了内存](https://img-ask.csdn.net/upload/201907/09/1562648663_621565.png) ![释放链表](https://img-ask.csdn.net/upload/201907/09/1562648697_654819.png) 这需要释放node中 position 分配的内存么(注释地方); 我 如果释放position 就会报错 有大佬知道么 更新;-> 出链表的时候释放没报错 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562739918_882454.png) ------ ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562739943_97624.png) ------- 当最后程序结束是清空释放 position 报错 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740020_898931.png) -------- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740040_80161.png) ---------- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740062_890709.png) --------- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562740074_826811.png) 我认为position位置应该是有效的,程序其他地方也没去变动position地址 代码片段(代码主要是github大佬的代码,https://github.com/mnisjk/snake.git) ``` #include <stdio.h> #include <stdlib.h> #include <stdbool.h> #include <curses.h> #include <sys/select.h> #include <time.h> #define SRC_WIDTH 70 #define SRC_HEIGHT 20 WINDOW *g_mainwin; int g_oldcur, g_score = 0, g_width, g_height; typedef struct { int x; int y; } pos; pos fruit; bool *spaces; // queue stuff struct s_node { pos *position; struct s_node *prev; struct s_node *next; } *front = NULL,*back =NULL; typedef struct s_node node; pos * peek(){ return front == NULL ? NULL : front->position; } node * dequeue(){ node *oldfront = front; front = front->next; return oldfront; } //queue a position at the back void enqueue(pos position) { pos *newpos = (pos *)malloc(sizeof(position)); node *newnode = (node *)malloc(sizeof(node)); newpos->x = position.x; newpos->y = position.y; newnode->position = newpos; if(front == NULL && back ==NULL) front = back = newnode; else { back->next = newnode; newnode->prev = back; back = newnode; } } //end queue stuff //start snake stuff void snake_write_text(int y,int x,char *str) { mvwaddstr(g_mainwin, y, x, str); } //draw the borders void snake_draw_board() { int i; for (i = 0; i < g_height;i++){ snake_write_text(i, 0, "|"); snake_write_text(i, g_width - 1, "|"); } for (i = 0; i < g_width;i++) { snake_write_text(0, i, "-"); snake_write_text(g_height, i, "-"); } snake_write_text(g_height + 1, 2, "Score:"); } //resets the terminal window and clears up the mem void snake_game_over(int i,pos p) { free(spaces); while (front) { node *n = front; front = front->next; free(n->position); free(n); } endwin(); printf("%d\n", i); printf("%d,%d\n",p.x,p.y); exit(0); } //当前位置是否在界限里面 bool snake_in_bounds(pos position) { return position.y < g_height && position.y > 0 && position.x < g_width - 1 && position.x > 0; } //2d坐标映射1d int snake_cooridinate_to_index(pos position) { return g_width * position.y + position.x; } //1d映射对应的坐标 pos snake_index_to_coordinate(int index) { int x = index % g_width; int y = index / g_width; return (pos){x, y}; } //随机出现水果 void snake_draw_fruit() { attrset(COLOR_PAIR(3)); int idx; do{ idx = rand() % (g_width * g_height); fruit = snake_index_to_coordinate(idx); } while (spaces[idx] || !snake_in_bounds(fruit)); attron(A_REVERSE); snake_write_text(fruit.y, fruit.x, " "); attroff(A_REVERSE); } //handles moving the snake for each iteration bool snake_move_player(pos head) { attrset(COLOR_PAIR(1)); //check if we ran into ourself int idx = snake_cooridinate_to_index(head); if(spaces[idx]){ pos te = {2, 2}; snake_game_over(2,te); } spaces[idx] = true; enqueue(head); //check if we're eating the fruit if(head.x == fruit.x && head.y == fruit.y) { snake_draw_fruit(); g_score += 10; }else{ node *tail = dequeue(); pos tem = *(tail->position); spaces[snake_cooridinate_to_index(tem)] = false; snake_write_text(tem.y, tem.x, " "); //if(tail->position != NULL) free(tail->position); free(tail); tail = NULL; } attron(A_REVERSE); snake_write_text(head.y, head.x, " "); attroff(A_REVERSE); char buffer[25]; sprintf(buffer, "%d", g_score); attrset(COLOR_PAIR(2)); snake_write_text(g_height+1,9,buffer); } void check_move_pos(pos *t_head,pos *head){ pos temp; node t_node = *back; if (&t_node == NULL) return ; else { if(t_node.prev != NULL){ if((t_node.prev)->position != NULL){ temp = *((t_node.prev)->position); if(t_head->x == head->x){ //x方向 if(temp.x == head->x && temp.y == head->y){ if(t_head->y > temp.y) head->y += 2; else head->y -= 2; } }else if(t_head->y == head->y) { //y方向 if(temp.x == head->x && temp.y == head->y){ if(t_head->x > temp.x) head->x += 2; else head->x -= 2; } } } } } } int main(int argc,char *argv[]) { int key = KEY_RIGHT; if((g_mainwin = initscr()) == NULL) { perror("error initialising ncursess"); exit(EXIT_FAILURE); } srand(time(NULL)); noecho(); curs_set(2); halfdelay(1); keypad(g_mainwin, TRUE); g_oldcur = curs_set(0); start_color( ); init_pair( 1, COLOR_RED, COLOR_BLACK ); init_pair( 2, COLOR_GREEN, COLOR_BLACK ); init_pair( 3, COLOR_YELLOW, COLOR_BLACK ); init_pair( 4, COLOR_BLUE, COLOR_BLACK ); init_pair( 5, COLOR_CYAN, COLOR_BLACK ); init_pair( 6, COLOR_MAGENTA, COLOR_BLACK ); init_pair( 7, COLOR_WHITE, COLOR_BLACK ); getmaxyx( g_mainwin, g_height, g_width ); g_width = g_width < SRC_WIDTH ? g_width : SRC_WIDTH; g_height = g_height < SRC_HEIGHT ? g_height : SRC_HEIGHT; // Set up the 2D array of all spaces spaces = (bool*) malloc( sizeof( bool ) * g_height * g_width ); snake_draw_board( ); snake_draw_fruit( ); pos head = { 5,5 }; enqueue( head ); // Event loop while( 1 ) { pos t_head = head; int in = getch(); if( in != ERR ) key = in; switch (key) { case KEY_DOWN: case 'k': case 'K': head.y++; break; case KEY_RIGHT: case 'l': case 'L': head.x++; break; case KEY_UP: case 'j': case 'J': head.y--; break; case KEY_LEFT: case 'h': case 'H': head.x--; break; } //禁止反向 check_move_pos(&t_head, &head); if (!snake_in_bounds(head)) snake_game_over(3, head); else snake_move_player(head); } pos te = {4, 4}; snake_game_over(4,te); } ``` 调试了 越来混乱了,一运行蛇啥不吃,链表里面应该只有一个地址才对,出链表也对应的释放了地址.可调试出现了最后出现了3个 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562744544_820667.png) 更新-> 搞好了, ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562750107_36874.png) 新建节点 node *newnode = (node *)malloc(sizeof(node));时候,莫名 newnode 中 next 指针指向了未知 地址,按原本意思应该指向 0x0空地址 所有 newnode->next = newnode->prev = NULL; 初始化一下,不然结束的释放链表 就会找到这个 0x20 的地址 ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562750298_228211.png) --- ![图片说明](https://img-ask.csdn.net/upload/201907/10/1562750311_263565.png) 一切正常了 ,高兴

销毁链表到底有什么用,程序结束后不应该所有的内存都释放完了吗

销毁链表到底有什么用,程序结束后不应该所有的内存都释放完了吗

数据结构C语言链表输入排序问题

题目: 持续输入 学号,姓名,地址 -1终止输入 _再按照学号从小到大顺序输出_ 个人感觉问题可能出在31行到38行 插入在链表最前面的时候会出现问题,其他情况没有问题 _测试 输入会错误的情况(插在开头):_ 3,sfdfs,sdfsfd 2,sdf,sdf,sfd -1 测试 输入会正确的情况: 3,sdf,sd,sfd 5,fsd,sdf 4,dsf,sdf -1 /////姓名和地址就乱打几个字符了。。。 下面是关于链的的数据的调试截图(输出_会错误的情况_,数据见上文 ) ![图片说明](https://img-ask.csdn.net/upload/201804/02/1522667445_697244.png) 直到输入 —1终止前 ,都是正确的(↑↑↑第一张调试图,排序也是对的) 但是终止后,就会无限输出开头的(↓↓↓最后输入的插到开头的那个数) 主链变成next永远指向自己的。 ![图片说明](https://img-ask.csdn.net/upload/201804/02/1522667643_272901.png) 虽然是用双链表写的,但是没什么关系。 个人感觉问题在出在指针返还值或者函数返还值上面,_步骤应该都是没有问题的_,调试了很多遍 ``` #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #include <stdlib.h> typedef struct node { char name[20]; char add[20]; int nu; struct node *pre; struct node *next; }Newnode; Newnode sort( node *q, Newnode *inser ) /* sort+insert 找到位置插入 */ { Newnode *temp = q; while ( 1 ) { if ( temp->next == NULL && temp->nu < inser->nu ) /* 插在尾的情况,插入数大于所有temp + 第一个数时插在后面 */ { temp->next = inser; inser->pre = temp; return(*q); } if ( temp->pre == NULL && temp->nu > inser->nu ) /* 第一个数时插在前面 */ { /* printf("okOK"); */ /* temp->pre=inser; */ inser->next = temp; return(*inser); } } inser->next = temp; inser->pre = temp->pre; temp->pre->next = inser; temp->pre = inser; return(*q); } Newnode add( Newnode *q ) //q就是主链的地址 { int count = 0; while ( 1 ) { Newnode *newnode; newnode = (Newnode * ) malloc( sizeof(Newnode) ); scanf( "%d,", &newnode->nu ); if ( newnode->nu == -1 ) { return(*q); } newnode->next = NULL; newnode->pre = NULL; scanf( "%[^,]%[^\n]", newnode->name, newnode->add ); if ( q->pre == NULL && q->next == NULL && count == 0 ) { q = newnode; count++; /* 第一个数的输入,只输入一次 */ continue; }else *q = sort( q, newnode ); /* 从第二个数开始就插入,这里的指针传递对吗。。。 */ } return(*q); } void printall( Newnode *q ) { Newnode *temp = q; /* temp当前指针 */ printf( "%d %s %s\n", q->nu, q->name, q->add ); temp = temp->next; /* printf("%d %s %s\n",temp->nu,temp->name,temp->add); */ while ( temp != NULL ) { printf( "%d %s %s\n", temp->nu, temp->name, temp->add ); temp = temp->next; } /* printf("%d %s %s\n",temp->nu,temp->name,temp->add); */ } /* ////////////////////// */ int main( void ) { char inpu; int inpu2; Newnode p; p.pre = NULL; p.next = NULL; p = add( &p ); printall( &p ); } ``` 第一个特别输入 其他 找到位置,然后插入,排序一个插入一个。 调试调试吧。 再次说一下,步骤应该是没有问题的。(除了插在开头的情况会出现错误)调试了很多数据了。感觉问题应该出在指针返还上面。

c语言链表删除节点问题

#include <stdio.h> #define NUll 0 #include <stdlib.h> struct stu { char name[6]; int xuehao; int grade; struct stu *next; }; typedef struct stu STU; main() { STU *p,*p_start,*p2,*p_print,*p_charu,*p_charu2; int i,xuehao; //输入 for (i=0;i<3;i++) { p=(STU *)malloc(sizeof(STU)); printf("请输入学生姓名:\n"); scanf("%s",&p->name); printf("请输入学生的学号:\n"); scanf("%d",&p->xuehao); printf("请输入学生的成绩:\n"); scanf("%d",&p->grade); if (i==0) p2=p_start=p; else { p2->next=p; p2=p; if (i==2) p->next=NULL; } } // printf("%d",p_start->next->next->next); // printf("%d",p_start->next->next->xuehao); //链表的插入 p_charu=p_start; printf("请输入要删除的学号\n"); scanf("%d",&xuehao); while (1) { p_charu2=p_charu->next; if (p_charu->next->xuehao==xuehao) { // if (p_charu->next->next==NULL) // p_charu->next=NULL; else p_charu->next=p_charu->next->next; free(p_charu2); break; } if (p_charu->xuehao==xuehao) { p_start=p_charu->next; free(p_charu); break; } p_charu=p->next; } //输出 p_print=p_start; /* for (i=0;i<2;i++) { printf("学生姓名为:%s\n",p_print->name); printf("学生的学号为:%d\n",p_print->xuehao); printf("学生的分数为:%d\n",p_print->grade); if (p_print->next!=NULL) p_print=p_print->next; } */ } 这是一个删除结点并输出的程序, 加注释的输出部分没有问题,关键应该在删除结点的循环那里,但是找不见错误啊, 错误为:当删除最后一个链表也就是3时程序发生错误,停止运行。 求解

free释放链表内存总是出错,求高手指点!!

#include <iostream> #include <iomanip> #include <string> using namespace std; #define TRUE 1 #define FALSE 0 typedef struct Student { char num[10]; char name[10]; char grade[10]; }Student; typedef struct StuList { Student data; StuList *next; }StuList, *lpStuList; lpStuList stuList = NULL;//全局的学生信息链表 lpStuList head = NULL; //全局的链表头节点 void menu() { cout << "选择(1:输入数据 2:输出数据 3:按姓名查找数据 其他:退出):" << endl; } int addStu() { int num; cout << "输入数据" << endl << "学生人数:"; cin >> num; if (stuList == NULL) { stuList = (lpStuList)malloc(sizeof(Student)); if (stuList != NULL) { stuList->next = NULL; } } lpStuList cur = NULL; for (int i = 1; i <= num; ++i) { Student student; cur = NULL; cur = (lpStuList)malloc(sizeof(Student)); cout << "第" << i << "个学生(学号 姓名 成绩):"; cin >> student.num >> student.name >> student.grade; cur->data = student; cur->next = NULL; if (head == NULL) { head = cur; } else stuList->next = cur; stuList = cur; } return TRUE; } int display() { cout << "输出数据" << endl; lpStuList cur = NULL; cur = head; if (cur == NULL) { cout << "没有任何学生信息哦" << endl; return FALSE; } else { cout << "学号\t\t姓名\t\t成绩" << endl; while (cur != NULL) { cout << cur->data.num << "\t\t" << cur->data.name << "\t\t" << cur->data.grade << endl; cur = cur->next; } return TRUE; } } void search() { char name[10]; cout << "按姓名查找数据" << endl << "请输入姓名:"; cin >> name; lpStuList cur = NULL; cur = head; int ok = 0; while (cur != NULL) { if (strstr(cur->data.name, name) != NULL) { if (ok == 0) { cout << "学号\t\t姓名\t\t成绩" << endl; ok = 1; } cout << cur->data.num << "\t\t" << cur->data.name << "\t\t" << cur->data.grade << endl; } cur = cur->next; } if (ok == 0) { cout << "未找到符合的信息哦" << endl; } } void exitApp() { if (head != NULL) { lpStuList cur = NULL; while (head != NULL) { cur = head; head = head->next; free(cur); // 运行到这里总会崩溃 cur = NULL; } } } int main() { int start = 1; while (start) { menu(); int num; cin >> num; switch (num) { case 1: {addStu(); break; } case 2: {display(); break; } case 3: {search(); break; } default: {exitApp(); start = 0; } } } system("pause"); }

删除链表节点时会释放整个节点的内存吗?

例如节点 class Node{ Node * prev; Node * next; int data; }; Node * temp= new Node; delete temp; delete该temp的时候会释放掉temp成员prev、next的空间吗?释放掉temp是不是意味着temp= NULL?

C语言链表问题怎么改错

#include <stdio.h> #include <stdlib.h> typedef struct TNode{ int data1; int data2; struct TNode *next; }*List; void CreateList(List &L,int n){ L=(List) malloc (sizeof(TNode)); L->next=null; List p; for(int i = 0;i<=n;i++){ p=(List) malloc (sizeof(TNode)); scanf("%d",&p->data1); scanf("%d",&p->data2); p->next=L->next; L->next=p; }//Create void main(){ int n; scanf("%d",&n); } 求助请问怎么改才不出错 d:\c\mutiply\mutiply1.c(10) : error C2143: syntax error : missing ')' before '&' d:\c\mutiply\mutiply1.c(10) : error C2143: syntax error : missing '{' before '&' d:\c\mutiply\mutiply1.c(10) : error C2059: syntax error : '&' d:\c\mutiply\mutiply1.c(10) : error C2059: syntax error : ')' d:\c\mutiply\mutiply1.c(29) : fatal error C1004: unexpected end of file found mutiply2.cpp d:\c\mutiply\mutiply2.cpp(12) : error C2065: 'null' : undeclared identifier d:\c\mutiply\mutiply2.cpp(12) : error C2440: '=' : cannot convert from 'int' to 'struct TNode *' Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast d:\c\mutiply\mutiply2.cpp(21) : error C2601: 'main' : local function definitions are illegal d:\c\mutiply\mutiply2.cpp(26) : fatal error C1004: unexpected end of file found

c语言链表节点删除问题求解

这是一个删除结点并输出的程序,总共有三个链表 错误为:当删除最后一个链表也就是3时程序发生错误,停止运行。 求大家帮忙解解决! ``` #include <stdio.h> #define NUll 0 #include <stdlib.h> struct stu { char name[6]; int xuehao; int grade; struct stu *next; }; typedef struct stu STU; main() { STU *p,*p_start,*p2,*p_print,*p_charu,*p_charu2; int i,xuehao; //输入 for (i=0;i<3;i++) { p=(STU *)malloc(sizeof(STU)); printf("请输入学生姓名:\n"); scanf("%s",&p->name); printf("请输入学生的学号:\n"); scanf("%d",&p->xuehao); printf("请输入学生的成绩:\n"); scanf("%d",&p->grade); if (i==0) p2=p_start=p; else { p2->next=p; p2=p; if (i==2) p->next=NULL; } } //链表的删除 p_charu=p_start; printf("请输入要删除的学号\n"); scanf("%d",&xuehao); while (1) { p_charu2=p_charu->next; if (p_charu->next->xuehao==xuehao) { p_charu->next=p_charu->next->next; free(p_charu2); break; } if (p_charu->xuehao==xuehao) { p_start=p_charu->next; free(p_charu); break; } p_charu=p->next; } } ```

单链表中删除节点后游离的节点怎么释放内存空间,不能用free,系统会自动回收吗?

![图片说明](https://img-ask.csdn.net/upload/201909/22/1569128268_998691.png) 如上图,指针指向了红色的节点,但由于 free 函数只能作用于malloc等函数,那这里的红色的节点如何释放内存呢,不过不管,系统会不会自动回收,如果不回收,如果大量存在这样的节点,不是很占用内存吗?

【C语言-链表】请问怎么判断链表已经被销毁?

【问题描述】学习链表,销毁链表总感觉没有成功,请问怎么确定链表确实被销毁了?为什么其余节点的内容没有变化? 【代码】 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> struct link_list { int num; char name[20]; struct link_list *next; }; typedef struct link_list ls; int icount = 0; /*链表长度*/ /*链表创建函数*/ ls* create() { ls *phead = NULL; ls *pend, *pnew; char flag; /******************************************************************* 链表循环赋值 *******************************************************************/ while(1) { pnew = (ls*)malloc(sizeof(struct link_list));/*分配空间*/ if(pnew == NULL) /*检测内存分配情况*/ { printf("内存分配失败\n"); return NULL; } if(0 == icount)/*如果是第一个节点*/ { icount++; pnew->next = NULL;/*尾指针指向空*/ phead = pnew;/*头指针指向头节点*/ pend = pnew;/*保存当前指针*/ printf("phead=%d\n", phead); printf("输入姓名:\n"); scanf("%s", pnew->name); printf("输入学号:\n"); scanf("%d", &pnew->num); printf("是否结束输入?y结束,n继续\n"); getchar(); flag = getchar(); if(flag == 'y') { return phead; } } else { icount++; pend->next = pnew; pend = pnew; pnew->next = NULL; printf("输入姓名:\n"); scanf("%s", pnew->name); printf("输入学号:\n"); scanf("%d", &pnew->num); printf("是否结束输入?y结束,n继续"); getchar(); flag = getchar(); if(flag == 'y') { return phead; } } } } /*遍历输出*/ void print(ls* phead) { ls* ptemp; ptemp = phead; while(NULL != ptemp) { printf("\n\n学号:%d\n姓名:%s\n", ptemp->num, ptemp->name); ptemp = ptemp->next; } } /*销毁*/ void damage(ls* phead) { ls *ptemp1; do { printf("删除前节点内容%d 地址phead=%d\n", phead->num, phead); ptemp1 = phead->next; /*保存当前销毁节点指向的地址*/ printf("被销毁节点指向的地址ptemp1=%d\n", ptemp1); free(phead); /*释放当前指针指向的节点空间*/ printf("释放后节点内容%d\n", phead->num); printf("释放后phead=%d\n", phead); phead = ptemp1; /*获取下一个节点地址*/ printf("重新赋值phead=%d\n\n", phead); }while(ptemp1 != NULL); } int main(void) { ls* phead = NULL; int lcat, lcat_del; phead = create(); printf("主函数头指针地址%d\n", phead); print(phead); damage(phead); return 0; } ``` 【运行结果】 ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576889257_479546.png) ![图片说明](https://img-ask.csdn.net/upload/201912/21/1576889268_527655.png)

关于C语言链表的一些问题,代码怎么都运行不成功跪求大神指点

下面代码主要实现链表的创建,插入,删除,并且能将两个年龄递增链表进行合并成递减链表 然而在插入和删除操作中gets函数无法起作用,strcmp函数也出现位置冲突报错。。功力不足实在解决不了。。跪求大神解答。。(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去。。我肉眼实在找不出来。。 ``` #include<stdio.h> #include<stdlib.h> #include<string.h> int a[10]={0}; int c[10]={0}; char b[100][10]; char d[100][10]; typedef struct stuInfo { char stuName[10];/*学生姓名*/ int age; /*年龄*/ } ElemType; typedef struct node { ElemType data; struct node *next; }LNode,*ListPtr;/*定义结构*/ ListPtr List_Init(int a[],char b[][10],int n){/*链表载入数据*/ LNode *s,*h; int i; h=NULL; h=(LNode*)malloc(sizeof(LNode)); h->data.age=0; memset(h->data.stuName,0,10*sizeof(char)); h->next=NULL; for(i=n-1;i>=0;i--) { s=(LNode*)malloc(sizeof(LNode));/*分配内存*/ memset(s->data.stuName,0,10*sizeof(char)); s->data.age=a[i];/*把年龄载入*/ strcpy(s->data.stuName,b[i]);/*把名字载入*/ s->next=h->next;/*新的结点指向头节点的下一个结点*/ h->next=s;/*头结点指向新的结点*/ } return h; } ListPtr List_Insert (ListPtr h, ElemType x){/*结点插入*/ LNode *s; s=(LNode*)malloc(sizeof(LNode)); s->data.age=x.age; strcpy(s->data.stuName,x.stuName);/*分配空间结点载入*/ s->next=h->next;/*新的结点指向前一个结点的后一个结点*/ h->next=s;/*前一个结点指向新结点*/ return h; } void List_Destroy(ListPtr h,ListPtr L){ LNode *s,*p; s=L->next;/*指向第一个结点*/ p=s; while(s){/*寻找所要删除的数据结点的前一个结点*/ if(s->data.age==h->data.age&&strcmp(s->data.stuName,h->data.stuName)==0) break; p=s; s=s->next; } s=p->next;/*s指定要删除的结点*/ p->next=s->next;/*前一个结点指向所要删除结点的后一个结点*/ free(s); } ListPtr List_Merge(ListPtr La, ListPtr Lb){/*链表变换,使递增链表变为递减链表,并去重*/ LNode *s, *pa, *pb; pa=La->next; pb=Lb->next;/*各指向两个链表的头结点*/ La->next=NULL; while(pa!=NULL&&pb!=NULL){ if(pa->data.age<=pb->data.age){ s=pa->next; pa->next=La->next; La->next=pa; pa=s;/*如果pa指向的年龄比pb的小则保留并逆置,pa指针指向下一个数据*/ if(strcmp(pa->data.stuName,pb->data.stuName)==0){ pb=pb->next;/*如果pa和pb所指的是同一个人,则pb也指向下一个数据,避免重复*/ } } else{ s=pb->next; pb->next=La->next; La->next=pb; pb=s; }/*如果pb指向的年龄比pa的小,则插入到La链表中*/ } while(pa!=NULL){ s=pa->next; pa->next=La->next; La->next=pa; pa=s;}/*处理La未处理的数据*/ while(pb!=NULL){ s=pb->next; pb->next=La->next; La->next=pb; pb=s;}/*处理Lb未处理的数据*/ Lb->next=NULL; free(Lb);/*释放Lb*/ } void OutPut(ListPtr La){/*输出链表*/ LNode *s; s=La->next; while(s){ printf("%s\t%d\n",s->data.stuName, s->data.age); } } int main(){ ElemType x; int n,i,j; ListPtr La=NULL, Lb=NULL; LNode *p,*r; for(i=0;i<10;i++){ memset(b[i],0,10*sizeof(char)); memset(d[i],0,10*sizeof(char)); }/*初始化字符串数组*/ strcpy(b[0],"Levis");a[0]=22; strcpy(b[1],"Adam");a[1]=23; strcpy(b[2],"Lord");a[2]=26; strcpy(b[3],"Fred");a[3]=28; strcpy(b[4],"May");a[4]=30; strcpy(b[5],"York");a[5]=35; La=List_Init(a, b, 6); /*La数据载入*/ strcpy(d[0],"Yuki");c[0]=19; strcpy(d[1],"Soraru");c[1]=27; strcpy(d[2],"Katin");c[2]=29; strcpy(d[3],"Sinsan");c[3]=31; strcpy(d[4],"York");c[4]=35; Lb=List_Init(c, d, 5); /*Lb数据载入*/ printf("choose operation: 1. insert 2. delete 3.nothing: "); scanf("%d",&j); if(j==1){ printf("enter the student's name you want to insert:");/*插入数据操作*/ gets(x.stuName); printf("enter the student's age:"); scanf("%d",&x.age); p=La->next; while(p){/*查找La中是否有此人*/ if(strcmp(p->data.stuName,x.stuName)==0) break; p=p->next; } if(p=NULL){/*如果没则寻找插入位置*/ p=La->next;r=p; while (p){ if(x.age<=p->data.age) break; r=p; p=p->next;/*找到比它大的值后,r记录此结点的前一个结点*/ } List_Insert (r, x);/*在r后插入此数据结点*/ } else{ p=Lb->next;/*La中已有此人,则查找Lb*/ while(p){ if(strcmp(p->data.stuName,x.stuName)==0) break; p=p->next; } if(p=NULL){ p=Lb->next;r=p; while (p){ if(x.age<=p->data.age) break; r=p; p=p->next; } List_Insert (r, x);}}/*同La*/ if(p!=NULL){ printf("inserted fail");}/*如果两链表中已有此人,则表示插入失败*/ } if(j==2){ printf("enter the student's name you want to delete:");/*进行删除操作*/ gets(x.stuName); printf("which lianbiao do you choose, if La, input 1;Lb,input 2:");/*选择要插入的链表*/ scanf("%d",&i); if(i==1){ p=La->next; while(p){ if(strcmp(p->data.stuName,x.stuName)==0)/*查找La中此人的位置*/ break; p=p->next;/*移动到下一个结点*/ } if(p!=NULL){ List_Destroy(p,La);} else {printf("查无此人");}/*移动到下一个结点*/ } if(i==2){ p=Lb->next; while(p){ if(strcmp(p->data.stuName,x.stuName)==0) break; p=p->next; } if(p!=NULL){List_Destroy(p,Lb);} else {printf("查无此人");}}/*同La*/ } printf("now ranking......\n");/*显示递增合并为递减的信息*/ List_Merge(La, Lb); OutPut(La);/*输出函数*/ return 0; } ``` 然而在插入和删除操作中gets函数无法起作用,strcmp函数也出现位置冲突报错。。功力不足实在解决不了。。跪求大神解答。。(感觉自己写的东西除了上面两个错误应该还有,但是因为位置冲突问题就只能编译到那个地方无法进行下去。。我肉眼实在找不出来。。

c语言存储链表数据问题

给你一个链表的头指针pHead,将一个结构体中的数据,比如: struct{ int num; char name[20]; char sex[10]; } 存储到磁盘中,然后下次启动程序之后又可以读取出来。 初次学习c语言,麻烦给出代码,谢谢

C语言链表与文件 从文件读数据到链表里

#include<stdio.h> #include<stdlib.h> #include<string.h> #include<malloc.h> //定义全局变量 int isEmpty=0;//标志,判断链表是否为空 //!!!定义单链表结构体!!! typedef struct Node{ int NUM;//类型总数 char NAME[100];//各类型名称 int num; //各类型下的货物总数 struct Node*next; }Node; //函数声明 Node*create(int n,Node*L); Node*input(Node*L); Node*output(Node*L); Node*outnum(Node*L); Node*outname(Node*L); Node*current(Node*L); void search(Node*L); void print(Node*L); void searchnum(Node*L); void searchname(Node*L); void display(int n,Node*L); //========新增加的函数======== Node*append(Node*L); //主函数 void main() { //创建文件 FILE*fp; fp = fopen("storehouse.txt","w"); fwrite(); fclose(fp); int x; int n;//初次输入的大小 Node *L; if(!(L=(Node *)malloc(sizeof(Node)))) //分配空间 { printf("\n"); exit(1); } printf("欢迎使用我的仓库管理系统!\n"); while(1) { //主菜单开始 printf("==========================\n"); printf("1.显示货物类型列表\n"); printf("2.增加货物类型\n"); printf("3.删除货物类型\n"); printf("4.货物入库\n"); printf("5.货物出库\n"); printf("6.库存显示\n"); printf("7.退出\n"); printf("==========================\n"); //主菜单结束 printf("选择1-7:"); scanf("%d",&x); switch(x) { case 1:;break; case 2:printf("请输入最初的货物类型数量:\n"); scanf("%d",&n); create(n,L); break; case 3:;break; case 4:;break; case 5:;break; case 6:display(n,L);break; case 7:;break; default:printf("input error!\nplaese input1-7"); } } } =========================== 想要读入货物信息:货物名称 货物价格 所属类型?这个怎么搞! [图片说明](https://img-ask.csdn.net/upload/201805/29/1527585662_34177.png) //函数 //1.创建链表节点 Node*create(int n,Node*L) { Node*pTail=L; L->next=NULL; Node*p; //利用尾插建立单链表 int i; for(i=1;i<=n;i++) { p=(Node*)malloc(sizeof(Node)); if(p==NULL) { printf("申请内存空间失败!\n"); } printf("请输入第%d种类型编号:",i); scanf("%d",&p->NUM); printf("请输入第%d种类型名称:",i); scanf("%s",&p->NAME); printf("请输入第%d种类型库存:",i); scanf("%d",&p->num); putchar('\n'); pTail->next=p; pTail=p; } p->next=NULL; return L; } //货物显示函数 void display(int n,Node*L) { Node*p; p=(Node*)malloc(sizeof(Node)); p=L->next;; int i=0; for(i=0;i<n;i++) //{ //while(p!=NULL) { printf("第%d种类型名称:",p->NUM); printf("%s\n",p->NAME); printf("第%d种类型库存:",p->NUM); printf("%d\n",p->num); putchar('\n'); p=p->next; //} } }

c语言链表指针的指针问题

想问一下那个插入函数的类型是结构体指针的指针,输入参数是一个空指针的地址,有没有大神解释一下这个函数如何使用的呢? 还有就是如果直接用结构体指针函数,应该如何改能实现一样的功能 //学生结构体,包含数据:学号、姓名、性别、毕业学校、初试分数、复试分数 //按照学号递增插入信息 //按照学生姓名查询学号和成绩 #include <stdio.h> #include <stdlib.h> #include <string.h> // 数组结构体 typedef struct Node { int num; char name[20]; char sex[10]; char graduate_scholl[20]; int initial_score; int re_score; struct Node *next; }NODE , *PNODE; //NODE为结构体变量名,指向结构的指针 /* 相当于 typedef struct Node { ...... }NODE; //使用typedef关键字用一个单词NODE代替struct TreeNode,并定于指向该结构体类型的指针PNODE: NODE *PNODE; */ /** * 插入数字 * @param ** head 头指针地址 * @param int value 插入的数值 * @return void */ PNODE * insertValue(PNODE*head); /** * 打印数组 * @param * head 头指针 * @return void */ void printfValue(PNODE head); void check(PNODE head);//查询函数 int main(void) { PNODE head = NULL; int index; do { printf("是否录入学生数据?(0否/1是):"); scanf("%d", &index); if (index == 1) { insertValue(&head);//这里为何要这样取空指针 printf("\n\n"); printfValue(head); } } while (index == 1); check(head); return 0; } PNODE *insertValue(PNODE *head) //就是这个函数 看了好几天都没太懂 { PNODE previous = NULL; // 前一个指向地址 PNODE current = *head; // 当前指向地址 PNODE pNew = (PNODE )malloc(sizeof( NODE)); if (pNew == NULL) { printf("申请内存失败"); exit(1); } else { printf("请输入学生学号:"); scanf("%d",&pNew->num); printf("请输入学生姓名:"); scanf("%s",pNew->name); printf("请输入学生性别:"); scanf("%s",pNew->sex); printf("请输入学生毕业学校:"); scanf("%s",pNew->graduate_scholl); printf("请输入学生初试分数:"); scanf("%d",&pNew->initial_score); printf("请输入学生复试分数:"); scanf("%d",&pNew->re_score); } // currnt 不为 NULL => 数组有值 // current的值 < 待插入的值 => 转到下一个指向地址,并把当前地址存入previous。 while (current != NULL && current -> num < pNew -> num) { previous = current; //往后遍历,直到插入的值不大于当前的数 current = current -> next; } // 下一个地址内的值 > 待插入的值 => 待插入的值插入previous和current之间 pNew -> next = current; if (previous == NULL) { // previous == NULL 说明没有执行遍历循环 // 头插法 *head = pNew; } else { // previous(next) -> pNew(next) -> current previous -> next = pNew;//待插入的值插入previous之后 } return head; } void check(PNODE head) { char temp[10]; PNODE p=head; if(NULL == p) { printf("未录入信息,信息查询失败!"); } else { printf("请输入需要查询考生姓名:"); scanf("%s",temp) ; } while(p != NULL) { if(!strcmp(p->name,temp)) { printf("\n考生姓名为:%s的信息如下:\n",p->name); printf("该学生的学号为:%d\n",p->num); printf("该考生的初试成绩为:%d\n",p->initial_score); printf("该考生的复试成绩为:%d\n",p->re_score); break; } p = p->next; } } void printfValue(PNODE head) { PNODE current = head; while (current != NULL) { printf("学号:%d\n",current->num); printf("姓名:%s\n",current->name); printf("性别:%s\n",current->sex); printf("毕业学校:%s\n",current->graduate_scholl); printf("初试分数:%d\n",current->initial_score); printf("复试分数:%d\n",current->re_score); printf("\n"); current = current -> next; } printf("\n"); }

如果能重来,我不会选择北漂——初见北京

一个人走的路

技术大佬:我去,你写的 switch 语句也太老土了吧

昨天早上通过远程的方式 review 了两名新来同事的代码,大部分代码都写得很漂亮,严谨的同时注释也很到位,这令我非常满意。但当我看到他们当中有一个人写的 switch 语句时,还是忍不住破口大骂:“我擦,小王,你丫写的 switch 语句也太老土了吧!” 来看看小王写的代码吧,看完不要骂我装逼啊。 private static String createPlayer(PlayerTypes p...

副业收入是我做程序媛的3倍,工作外的B面人生是怎样的?

提到“程序员”,多数人脑海里首先想到的大约是:为人木讷、薪水超高、工作枯燥…… 然而,当离开工作岗位,撕去层层标签,脱下“程序员”这身外套,有的人生动又有趣,马上展现出了完全不同的A/B面人生! 不论是简单的爱好,还是正经的副业,他们都干得同样出色。偶尔,还能和程序员的特质结合,产生奇妙的“化学反应”。 @Charlotte:平日素颜示人,周末美妆博主 大家都以为程序媛也个个不修边幅,但我们也许...

我说我不会算法,阿里把我挂了。

不说了,字节跳动也反手把我挂了。

2020年大厂Java面试前复习的正确姿势(800+面试题答案解析)

前言 个人觉得面试也像是一场全新的征程,失败和胜利都是平常之事。所以,劝各位不要因为面试失败而灰心、 丧失斗志。也不要因为面试通过而沾沾自喜,等待你的将是更美好的未来,继续加油! 本篇分享的面试题内容包括:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ...

抖音上很火的时钟效果

反正,我的抖音没人看,别人都有几十万个赞什么的。 发到CSDN上来,大家交流下~ 主要用到原生态的 JS+CSS3。 具体不解释了,看注释: &lt;!DOCTYPE html&gt; &lt;html lang="en"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Title&lt;/tit...

记录下入职中软一个月(外包华为)

我在年前从上一家公司离职,没想到过年期间疫情爆发,我也被困在家里,在家呆着的日子让人很焦躁,于是我疯狂的投简历,看面试题,希望可以进大公司去看看。 我也有幸面试了我觉得还挺大的公司的(虽然不是bat之类的大厂,但是作为一名二本计算机专业刚毕业的大学生bat那些大厂我连投简历的勇气都没有),最后选择了中软,我知道这是一家外包公司,待遇各方面甚至不如我的上一家公司,但是对我而言这可是外包华为,能...

又出事了?网站被攻击了?高中生?

北京时间2020年3月27日9点整,如往常一样来到公司,带开电脑,正准备打开Github网站看一会源代码,再开始手头的工作。哟吼,一直打不开,一直出现如下页面: 我想很多网友也尝到了甜头,各大技术群炸开了锅,据网友反馈有攻击者正在发起大规模的中间人挟持,京东和Github等网站等网站都受到了影响。 什么是中间中间人挟持呢? 简而言之,就是攻击者在数据网络传输的过程中,截获传输过程中的数据并篡改...

培训班出来的人后来都怎么样了?(二)

接着上回说,培训班学习生涯结束了。后面每天就是无休止的背面试题,不是没有头脑的背,培训公司还是有方法的,现在回想当时背的面试题好像都用上了,也被问到了。回头找找面试题,当时都是打印下来天天看,天天背。 不理解呢也要背,面试造飞机,上班拧螺丝。班里的同学开始四处投简历面试了,很快就有面试成功的,刚开始一个,然后越来越多。不知道是什么原因,尝到胜利果实的童鞋,不满足于自己通过的公司,嫌薪水要少了,选择...

面试了一个 31 岁程序员,让我有所触动,30岁以上的程序员该何去何从?

最近面试了一个31岁8年经验的程序猿,让我有点感慨,大龄程序猿该何去何从。

大三实习生,字节跳动面经分享,已拿Offer

说实话,自己的算法,我一个不会,太难了吧

程序员垃圾简历长什么样?

已经连续五年参加大厂校招、社招的技术面试工作,简历看的不下于万份 这篇文章会用实例告诉你,什么是差的程序员简历! 疫情快要结束了,各个公司也都开始春招了,作为即将红遍大江南北的新晋UP主,那当然要为小伙伴们做点事(手动狗头)。 就在公众号里公开征简历,义务帮大家看,并一一点评。《启舰:春招在即,义务帮大家看看简历吧》 一石激起千层浪,三天收到两百多封简历。 花光了两个星期的所有空闲时...

工作八年,月薪60K,裸辞两个月,投简历投到怀疑人生!

近日,有网友在某职场社交平台吐槽,自己裸辞两个月了,但是找工作却让自己的心态都要崩溃了,全部无果,不是已查看无回音,就是已查看不符合。 “工作八年,两年一跳,裸辞两个月了,之前月薪60K,最近找工作找的心态崩了!所有招聘工具都用了,全部无果,不是已查看无回音,就是已查看不符合。进头条,滴滴之类的大厂很难吗???!!!投简历投的开始怀疑人生了!希望 可以收到大厂offer” 先来看看网...

我把华为小米年报放一起,发现华为才是真·手机公司,小米确实不靠卖手机赚钱...

郭一璞 发自 凹非寺量子位 报道 | 公众号 QbitAI国产手机界的两大玩家,华为&amp;小米,昨天在同一天前后脚发布了2019年财报。同行冤家,发财报也碰在了同一天。那我们就对比...

大牛都会用的IDEA调试技巧!!!

导读 前天面试了一个985高校的实习生,问了他平时用什么开发工具,他想也没想的说IDEA,于是我抛砖引玉的问了一下IDEA的调试用过吧,你说说怎么设置断点...

97年世界黑客编程大赛冠军作品(大小仅为16KB),惊艳世界的编程巨作

这是世界编程大赛第一名作品(97年Mekka ’97 4K Intro比赛)汇编语言所写。 整个文件只有4095个字节, 大小仅仅为16KB! 不仅实现了3D动画的效果!还有一段震撼人心的背景音乐!!! 内容无法以言语形容,实在太强大! 下面是代码,具体操作看最后! @echo off more +1 %~s0|debug e100 33 f6 bf 0 20 b5 10 f3 a5...

不要再到处使用 === 了

我们知道现在的开发人员都使用 === 来代替 ==,为什么呢?我在网上看到的大多数教程都认为,要预测 JavaScript 强制转换是如何工作这太复杂了,因此建议总是使用===。这些都...

什么是a站、b站、c站、d站、e站、f站、g站、h站、i站、j站、k站、l站、m站、n站?00后的世界我不懂!

A站 AcFun弹幕视频网,简称“A站”,成立于2007年6月,取意于Anime Comic Fun,是中国大陆第一家弹幕视频网站。A站以视频为载体,逐步发展出基于原生内容二次创作的完整生态,拥有高质量互动弹幕,是中国弹幕文化的发源地;拥有大量超粘性的用户群体,产生输出了金坷垃、鬼畜全明星、我的滑板鞋、小苹果等大量网络流行文化,也是中国二次元文化的发源地。 B站 全称“哔哩哔哩(bilibili...

十个摸鱼,哦,不对,是炫酷(可以玩一整天)的网站!!!

文章目录前言正文**1、Kaspersky Cyberthreat real-time map****2、Finding Home****3、Silk – Interactive Generative Art****4、Liquid Particles 3D****5、WINDOWS93****6、Staggering Beauty****7、Ostagram图片生成器网址****8、全历史网址*...

终于,月薪过5万了!

来看几个问题想不想月薪超过5万?想不想进入公司架构组?想不想成为项目组的负责人?想不想成为spring的高手,超越99%的对手?那么本文内容是你必须要掌握的。本文主要详解bean的生命...

毕业5年,我熬夜整理出了这50个优质的电子书网站,吐血推荐!

大家好,我是武哥,最近经常有小伙伴问我要电子书,都什么年代了,还找不到电子书吗?如果要说原因,那就是你还没遇到武哥我(手动滑稽~)!我今天把这么多年我经常看的电子书网站整理一下给大家,基本上能解决大家的需求。不管是在校生还是已经工作了,相信肯定对你有所帮助! 1.鸠摩搜书 首先给大家推荐的网站是:鸠摩搜书 地址:https://www.jiumodiary.com/ 这个网上非常棒,上面有很多优质...

MySQL性能优化(五):为什么查询速度这么慢

前期回顾: MySQL性能优化(一):MySQL架构与核心问题 MySQL性能优化(二):选择优化的数据类型 MySQL性能优化(三):深入理解索引的这点事 MySQL性能优化(四):如何高效正确的使用索引 前面章节我们介绍了如何选择优化的数据类型、如何高效的使用索引,这些对于高性能的MySQL来说是必不可少的。但这些还完全不够,还需要合理的设计查询。如果查询写的很糟糕,即使表结构再合理、索引再...

大厂的 404 页面都长啥样?最后一个笑了...

每天浏览各大网站,难免会碰到404页面啊。你注意过404页面么?猿妹搜罗来了下面这些知名网站的404页面,以供大家欣赏,看看哪个网站更有创意: 正在上传…重新上传取消 腾讯 正在上传…重新上传取消 网易 淘宝 百度 新浪微博 正在上传…重新上传取消 新浪 京东 优酷 腾讯视频 搜...

自从喜欢上了B站这12个UP主,我越来越觉得自己是个废柴了!

不怕告诉你,我自从喜欢上了这12个UP主,哔哩哔哩成为了我手机上最耗电的软件,几乎每天都会看,可是吧,看的越多,我就越觉得自己是个废柴,唉,老天不公啊,不信你看看…… 间接性踌躇满志,持续性混吃等死,都是因为你们……但是,自己的学习力在慢慢变强,这是不容忽视的,推荐给你们! 都说B站是个宝,可是有人不会挖啊,没事,今天咱挖好的送你一箩筐,首先啊,我在B站上最喜欢看这个家伙的视频了,为啥 ,咱撇...

代码注释如此沙雕,会玩还是你们程序员!

某站后端代码被“开源”,同时刷遍全网的,还有代码里的那些神注释。 我们这才知道,原来程序员个个都是段子手;这么多年来,我们也走过了他们的无数套路… 首先,产品经理,是永远永远吐槽不完的!网友的评论也非常扎心,说看这些代码就像在阅读程序员的日记,每一页都写满了对产品经理的恨。 然后,也要发出直击灵魂的质问:你是尊贵的付费大会员吗? 这不禁让人想起之前某音乐app的穷逼Vip,果然,穷逼在哪里都是...

总结了Mybatis,原来知识点也没多少嘛

看完这篇Mybatis,感觉你三天就会用了。

爬虫(101)爬点重口味的

小弟最近在学校无聊的很哪,浏览网页突然看到一张图片,都快流鼻血。。。然后小弟冥思苦想,得干一点有趣的事情python 爬虫库安装https://s.taobao.com/api?_ks...

疫情后北上广深租房价格跌了吗? | Alfred数据室

去年3月份我们发布了《北上广深租房图鉴》(点击阅读),细数了北上广深租房的各种因素对租房价格的影响。一年过去了,在面临新冠疫情的后续影响、城市尚未完全恢复正常运转、学校还没开学等情况下...

面试官给我挖坑:a[i][j] 和 a[j][i] 有什么区别?

点击上方“朱小厮的博客”,选择“设为星标”后台回复&#34;1024&#34;领取公众号专属资料本文以一个简单的程序开头——数组赋值:int LEN = 10000; int[][] ...

在拼多多上班,是一种什么样的体验?我心态崩了呀!

之前有很多读者咨询我:武哥,在拼多多上班是一种什么样的体验?由于一直很忙,没抽出时间来和大家分享。上周末特地花点时间来写了一篇文章,跟大家分享一下拼多多的日常。 1. 倒时差的作息 可能很多小伙伴都听说了,拼多多加班很严重。这怎么说呢?作息上确实和其他公司有点区别,大家知道 996,那么自然也就能理解拼多多的“11 11 6”了。 所以当很多小伙伴早上出门时,他们是这样的: 我们是这样的: 当...

相关热词 c# 按行txt c#怎么扫条形码 c#打包html c# 实现刷新数据 c# 两个自定义控件重叠 c#浮点类型计算 c#.net 中文乱码 c# 时间排序 c# 必备书籍 c#异步网络通信
立即提问