这怎么可能失去记忆呢?瓦尔格朗德

时间:2018-08-06 07:48:55

标签: c memory-management memory-leaks heap valgrind

我使用valgrind来检测内存丢失,并且我知道应该将可能丢失的情况视为绝对丢失,但是,我有一个非常简单的程序,它怎么可能丢失内存?我不会在茫茫荒野中随机分配任何指针。

首先,我编写一个函数来创建一个任意大小的新字符串:(分配内存,然后将数组中的所有值设置为0,以0结尾。在我的代码中,它尽可能的干净意见。)

public class TstFrag extends Fragment {
 private DataModel model;
public TstFrag() {

}

public static TstFrag getInstance(DataModel model){
  TstFrag fragment = new TstFrag();
  Bundle bundle = new Bundle();
  bundle.putSerializable("mData", model);
  fragment.setArguments(bundle);
  return fragment;
} 

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    model = (DataModel)getArguments().getSerializable("mData");
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
    final View rootView =  inflater.inflate(R.layout.layout_cht, container, false);
    // findViewById() for imageView and nameTextView 
     Picasso.get().load(model.getImage()).into(imageView);
     nameTextView.setText(model.getName());

}}

然后我使用此功能

#include <stdlib.h>

char    *ft_strnew(size_t size)
{
    char    *str;
    size_t  i;

    str = (char*)malloc(sizeof(char) * (size + 1));
    if (str == NULL)
        return (str);
    i = 0;
    while (i < size)
    str[i++] = '\0';
    str[i] = '\0';
    return (str);
}

如果我不#include <fcntl.h> #include <stdlib.h> char *ft_strnew(size_t size); int main() { char *s; s = ft_strnew(2); s[0] = 'a'; s[1] = 'b'; s[2] = 0; free(s); return 0; } ,valgrind说我肯定会丢失3个字节。现在它放在free(s)中,并且valgrind说我肯定会丢失0个字节。

  1. 但是,它总是说我可能会丢失72个字节。这是什么意思?如何解决?
  2. 报告末尾显示2个错误,这些错误是什么?
  3. 如何解决“仍可到达”的问题?重要吗?
free(s)

0 个答案:

没有答案