我使用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个字节。
free(s)