當前位置:首頁 » 編程語言 » c語言指針釋放

c語言指針釋放

發布時間: 2022-06-08 19:15:11

『壹』 c語言 函數內指針返回後的釋放問題

  1. 不會釋放。

  2. 正確。

『貳』 C語言函數調用完畢,函數里的變數指針都釋放干凈了嗎

一般在函數中的變數指針都會釋放,但是除了用*alloc取得的空間,還除了加了static的變數,加了static的變數只在程序退出後才釋放,用*alloc取得的空間只在free後和程序結束時才釋放。

『叄』 C語言 關於指針釋放空間問題

你的這個不是內存泄露,是沒有給指針p正確分配空間,導致程序崩潰


代碼修改如下

#include<stdio.h>
#include<stdlib.h>
intmain()
{
int*p=NULL;
inta=0x55;

p=(int*)malloc(sizeof(int));//加上這一行

*p=a;

free(p);
return(0);
}

『肆』 菜鳥求助 C語言鏈表工具指針的釋放

你使用的 C 開發平台?
在 C++ 中 new 和 delete 都定義成了操作符
操作符重載 的聲明與一般函數不同
如果要和C++兼容還是使用其他字
比如 New 和 Delete

void free(void * ptr) 是 stdlib.h 中定義的標准函數,與
void * calloc(size_t nmemb,size_t size);
void * malloc(size_t size);
void * realloc(void * ptr,size_t size);
對應配合釋放空間

你在插入程序中哪裡使用 free 了?
插入程序中你沒有申請新的 你要釋放什麼?
程序中使用的 n 是在哪裡聲明的 作什麼用

看了半天你刪除函數 也搞不明白你刪除的是第m個節點,還是m個節點
要刪除一個節點,怎麼使用兩次 free?
刪除函數的功能是肯定不正確

刪除沒有那麼復雜
一、刪除第m個節點;指針直接移動m節點,把next鏈接接到上一節點;釋放該節點就ok.
二、刪除關鍵字為m的節點;順序查找比較關鍵字,找到後刪除;
可能還有其他節點又相同的關鍵字,兩種處理方法,
1 是只刪除第一個找到的
2 是刪除所有具有相同關鍵字的節點
bool Delete(struct pp * &k,int m) //刪除第m個節點 不需要返回指針,成功 true 失敗 false 鏈表頭指針引用傳送
{
struct pp *s1,*s3;
int i;
if(m<1||m>n)return false; //要刪除的節點不存在 m 從1 計數
if(k==NULL)
return false; //空表
s3=k;
if(m==1){ //刪除表頭第一個節點
k=k->next; //k 是指針已用 可以修改
//不能修改 s1 或 s3
n--; //表長度減1
s3->next=NULL;
free(s3); //釋放原第一個節點空間
return true;
}
for(i=1;i<m-1;i++)
s1=s1->next; //找到前一個
s3=s1->next;//s3指向該節點
s1->next=s3->next;//s1->next 指向要刪除節點所連的下一個節點
//當 m=n時要刪除最後一個節點,該演算法仍然工作
//此時 s3-next=NULL
s3->next=NULL;
free(s3);
n--;
return true;
}

在插入函數中
如果你的m是位置,從0計數還是從1計數,

bool insert(struct pp * &b,struct pp *c,int m) //同樣鏈表頭指針引用傳遞
{
struct pp *s4;
int i;
if(m<=0||m>n+1)return false;//插入位置超界
//可以在m= n+1的位置插入
if(m=1){
c=b->next;
b=c;
n++;
return true; //空表插入第一個節點也工作
}
s4=b;

for(i=1;i<m;i++) //找到 m-1的位置
s4=s4->next;
c->next=s4->next; // c->next 指向原 m
s4->next=c; // (m-1)->next 指向 c
n=n+1; //表長度加1
}

在編函數是必須首先明確函數要實現的功能,可能遇到的情況和處理方法

『伍』 C語言 指針的釋放問題

前提是這個指針使用malloc、realloc、calloc動態申請來的,當你不使用這個指針時,就釋放掉,在什麼地方釋放都是可以的,關鍵是這個指針沒有被修改過

『陸』 C語言數組指針內存釋放

//用指針的指針當二維數組請參考以下代碼
#include<stdio.h>
#include<stdlib.h>
intmain(){
int**b;
b=(int**)malloc(sizeof(int*)*4);//二維數組b有4行

for(inti=0;i<4;i++)//替每行分配存儲空間
b[i]=(int*)malloc(sizeof(int)*3);//二維數組b每行3列

for(inti=0;i<4;++i)for(intj=0;j<3;j++)
b[i][j]=i*j;

for(inti=0;i<4;++i){
for(intj=0;j<3;j++)
printf("%5d",b[i][j]);
printf(" ");
}

for(inti=0;i<4;i++)
free(b[i]);//釋放每行的存儲空間
free(b);//釋放b
return0;
}

『柒』 c語言指針指向的局部變數釋放

函數完成只釋放局部變數本身佔用的空間,如果變數是指針變數,則不會釋放指針指向的空間

『捌』 關於C語言指針釋放的問題

這段話中有好幾個錯誤。
1. 如果有int A, int *B = &A, 這時執行free(B) 一定引起內存錯誤。
free只能使用在動態分配的內存上,不能用在堆棧或靜態數據上。
類似 int A,或 static int A,這樣的變數定義,是在編譯時已經確定了內存位置。
動態分配是在運行時,從堆中臨時分配的內存塊(用malloc,或new)。這些內存塊需要用 free(malloc)或delete(new)釋放;

2. 變數名實際是內存地址的代稱,這句也不完全對
在程序中,變數名代表了「這個地址上的數值」,只有對變數使用&操作,才能得到變數的地址

3. free(B)應該釋放了B這個指針變數
如果指針變數存放了一個動態得到的地址,free(B)釋放的是變數B的數值(不是變數B的地址),由於變數B的數值是一個動態分配得到的地址,所以free釋放的是動態地址。

『玖』 C語言 指針函數 釋放內存

一時看不明白你的代碼。一個原則是,start指向了誰。如果指向了在這個函數中定義的臨時自動型數組,那必然存在返回局部數組指針的問題,就是你說的內存釋放問題。這樣雖然指針被返回了,但它指向的內容已經不受代碼控制了,很危險。但如果start指向的是在主函數中聲明的數組,或是全局或靜態數組(這個函數中定義的靜態數組也行),或者是用動態分配法獲得的內存空間且未曾釋放,則不存在任何問題,是完全合理合法的。用動態分配法時要注意在不用時釋放內存空間,以免造成內存泄漏。

『拾』 C語言:指針所佔空間系統自動釋放

堆上分配的空間要手動釋放,棧上的空間由系統釋放
比如用malloc分配的是在堆上的,所以要用free手動釋放
棧上空間比如說函數傳如的值,由系統自動釋放
比如
int*
a
=
malloc(100);
要free(a)釋放a指向的內存,但a這個變數所佔的空間不用管它,系統自動會處理的

熱點內容
linux讀u盤 發布:2024-05-02 11:49:37 瀏覽:782
android圖片點擊全屏 發布:2024-05-02 11:48:55 瀏覽:431
androidmvc和 發布:2024-05-02 11:48:49 瀏覽:656
兩位數密碼要試多少次能試出來 發布:2024-05-02 11:30:59 瀏覽:689
ae腳本插件表達式 發布:2024-05-02 11:26:45 瀏覽:267
手機電腦通用的伺服器 發布:2024-05-02 11:25:26 瀏覽:839
安卓b站賬號如何在ios登陸 發布:2024-05-02 11:20:29 瀏覽:198
微信加密碼鎖怎麼設置 發布:2024-05-02 11:17:24 瀏覽:585
四川伺服器託管雲空間雲主機 發布:2024-05-02 11:04:28 瀏覽:962
手機app重編譯 發布:2024-05-02 11:01:40 瀏覽:537