30/09/2018, 16:03
Cùng đặt vấn đề nào (Bản số 4)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void myfunction(char *&q){
int i ;
for(i= 0; i <1000; i++){
q = (char*)malloc(8);
memcpy(q, "hello", 6);
printf(q);
}
}
int main(){
char * p;
myfunction(p);
getchar();
}
- Đoạn code trên có vấn đề gì không?
- Nếu không thì với dung lượng Ram 2000 byte, có vấn đề nào không?
- Phải làm gì để giải quyết vấn đề trên?
Bài liên quan
Có,
malloc
, cấp dữ liệu, mà khôngfree
, hủy vùng nhớ được cấp, nên sẽ bị memory leak tức lãng phí vùng nhớ.Thì sẽ bị hết RAM, khi đó malloc trả về
NULL
,memcpy
vàoNULL
làMemory access violent
dẫn đến crash chương trình.Hủy khi dùng xong vùng dữ liệu đó hoặc phải kiểm tra nếu hết RAM thì phải có giải pháp thay thế chứ không thể copy bừa vậy được.
Ok anh đúng hết, mong những vấn đề nho nhỏ này giúp cộng đồng diễn đàn nắm vững kiến thức hơn.
Nghe xong sướng quá, thực ra lỗi này hay bị lắm. Nhưng anh lập trình lâu, bị nhiều nên nhớ.
Anh Đạt ơi em hỏi tại sao với RAM =2000 byte thì lại hết RAM ạ.
Sài quài mà không trả thì hết thôi
À thanks kiu bác vậy mà em ko nghĩ ra