日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

C语言中malloc为字符型指针分配内存引起的缓冲区泄露

發布時間:2025/3/21 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C语言中malloc为字符型指针分配内存引起的缓冲区泄露 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
/*
問題描述;
緩沖區溢出:
(1)malloc:分配一塊連續的未被使用得當內存塊,但是不能保證內存塊臨近的其他內存塊也未被使用;
(2)當用malloc未char類型指針分配一個字節長度內存時,但向其中保存n個字符組成的字符串,會導致緩沖區溢出

(3)因此,最好如q一般,在初始化的時候分配足夠大的內存,以防止緩沖區泄露;

(4)malloc必須要和free配套使用,否則會導致內存泄露;

(5)指針在使用完后,必須重新指向NULL;否則會變成野指針,

*/
#include <stdio.h>
#include <stdlib.h>

#include <string.h>

int main()
{
? ? char *p = NULL;
? ? char *q = NULL;

? ? p = (char *)malloc(1*sizeof(char));
? ? printf("value(p)= %d\n",p);
? ? printf("value(p+1)= %d\n",p+1);
? ? printf("*(p+1)= %c\n",*(p+1));? ? ? ? ?//可以打印出$,雖然并不知道是否被系統使用,但是p+1指向的內存中確實有數據;

? ? gets(p);
? ? printf("value(p)= %d\n",p);? ? ? ? ? ? //驗證:p的值仍是malloc返回的地址值,因此gets操作應該是:將數據流依次存進p指? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 定內存中,并未對字符串單獨分配其他內存;
? ? printf("value(p+1)= %d\n",p+1);? ? ? ? //驗證:即使p執行一個字符串,但是進行p+1運算時,地址仍然只是增加了1個字? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 節!
? ? printf("value(p+2)= %d\n",p+2);
? ? printf("value(p+3)= %d\n",p+3);
? ? printf("value(p+4)= %d\n",p+4);
? ? printf("value(p+5)= %d\n",p+5);

? ? printf("*(p)= %c\n",*p);
? ? printf("*(p+1)= %c\n",*(p+1));
? ? printf("*(p+2)= %c\n",*(p+2));
? ? printf("*(p+3)= %c\n",*(p+3));
? ? printf("*(p+4)= %c\n",*(p+4));
? ? printf("*(p+5)= %c\n",*(p+5));
? ? printf("*(p+6)= %c\n",*(p+6));
? ? printf("*p= %s\n",p);

? ? q = (char *)malloc(10*sizeof(char));
? ? printf("value(q)= %d\n",q);
? ? printf("value(q+1)= %d\n",q+1);
? ? printf("*(q)= %c\n",*q);
? ? printf("*(q+1)= %c\n",*(q+1));
? ? printf("*(q+2)= %c\n",*(q+2));
? ? printf("*(q+3)= %c\n",*(q+3));
? ? printf("*(q+4)= %c\n",*(q+4));
? ? printf("*(q+5)= %c\n",*(q+5));
? ? printf("*(q+6)= %c\n",*(q+6));

? ? q =? "hello";? ? ? ? ? ? ? ? ? ? ? ?//驗證:q的值被更改,與malloc返回的地址值不同!!因為:"hello"是字符串常量,系統編譯? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 時會為其分配內存空間,q重新指向字符串常量
? ? printf("value(q)= %d\n",q);

? ? free(p);
? ? free(q);
? ? p =q =NULL;


????printf("Hello world!\n");

? ? return 0;
}


總結

以上是生活随笔為你收集整理的C语言中malloc为字符型指针分配内存引起的缓冲区泄露的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。