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();
}
  1. Đoạn code trên có vấn đề gì không?
  2. Nếu không thì với dung lượng Ram 2000 byte, có vấn đề nào không?
  3. Phải làm gì để giải quyết vấn đề trên?
Nguyễn Minh Dũng viết 18:13 ngày 30/09/2018

Đoạn code trên có vấn đề gì không?

Có, malloc, cấp dữ liệu, mà không free, hủy vùng nhớ được cấp, nên sẽ bị memory leak tức lãng phí vùng nhớ.

Nếu không thì với dung lượng Ram 2000 byte, có vấn đề nào không?

Thì sẽ bị hết RAM, khi đó malloc trả về NULL, memcpy vào NULLMemory access violent dẫn đến crash chương trình.

Phải làm gì để giải quyết vấn đề trên?

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.

Dũng Kon viết 18:05 ngày 30/09/2018

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.

Nguyễn Minh Dũng viết 18:11 ngày 30/09/2018

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ớ.

Đặng Đức viết 18:08 ngày 30/09/2018

Anh Đạt ơi em hỏi tại sao với RAM =2000 byte thì lại hết RAM ạ.

Minh Hoàng viết 18:20 ngày 30/09/2018

Sài quài mà không trả thì hết thôi

Đặng Đức viết 18:16 ngày 30/09/2018

À thanks kiu bác vậy mà em ko nghĩ ra

Bài liên quan
0