带有指针参数的函数内给指针参数赋值时注意事项
来源:互联网 发布:笔记本硬盘的数据导出 编辑:程序博客网 时间:2024/05/16 13:45
在career cup上看到这样一题
http://www.careercup.com/questionthread?id=43963
#include "stdafx.h"
#include <iostream>
using namespace std;
void newBuffer(char* outBuffer, size_t sz)
{
outBuffer = new char[sz];
}
int _tmain(int argc, _TCHAR* argv[])
{
const char* kung = "KUNG";
char* foo;
size_t len = strlen(kung);
newBuffer(foo, len+1);
memset(foo, 0, len+1);
strncpy(foo, kung, len);
cout << foo << endl;
return 0;
}
这个程序看起来好像在做这样一件事:定义一个指针foo,然后在newBuffer函数中给指针foo分配内存,然后把kung中的内容拷贝到foo中。
注意!这里在newBuffer中,new只是给指针outBuffer分配了内存,而并没有给指针foo分配!这里newBuffer函数只是简单的把指针foo的值赋给了局部指针变量outBuffer!所以foo最后根本没有初始化,也没有指向任何内存!
正确的做法是将
void newBuffer(char* outBuffer, size_t sz)
{
outBuffer = new char[sz];
}
改为
void newBuffer(char* &outBuffer, size_t sz)
{
outBuffer = new char[sz];
}
http://www.careercup.com/questionthread?id=43963
#include "stdafx.h"
#include <iostream>
using namespace std;
void newBuffer(char* outBuffer, size_t sz)
{
}
int _tmain(int argc, _TCHAR* argv[])
{
}
这个程序看起来好像在做这样一件事:定义一个指针foo,然后在newBuffer函数中给指针foo分配内存,然后把kung中的内容拷贝到foo中。
注意!这里在newBuffer中,new只是给指针outBuffer分配了内存,而并没有给指针foo分配!这里newBuffer函数只是简单的把指针foo的值赋给了局部指针变量outBuffer!所以foo最后根本没有初始化,也没有指向任何内存!
正确的做法是将
void newBuffer(char* outBuffer, size_t sz)
{
}
改为
void newBuffer(char* &outBuffer, size_t sz)
{
}
这里outBuffer变成了一个引用,任何对outBuffer的更改等同于对foo的更改。
转自:http://blog.sina.com.cn/s/blog_6e0693f70100slj5.html
- 带有指针参数的函数内给指针参数赋值时注意事项
- 带有模板参数的函数指针
- 使用指针作为函数参数的注意事项
- C语言中“指针”作为“函数参数”时的注意事项
- 指针做参数时注意事项
- 函数指针,指针函数,指针的指针做函数参数
- C 函数传递指针参数注意事项
- 指针做为参数注意事项
- 函数指针作为参数传递给函数
- 指针的传参数与赋值问题
- 当函数的参数为int类型 调用该函数是给该参数赋值null会报空指针异常nullpointexception
- 数组与字符串、字符指针与其他类型指针、赋值参数、指针参数以及引用参数、函数指针
- 成员函数指针作为参数传递给其他函数和普通函数指针的传递
- 函数参数中的“指针的指针”
- 带指针参数的函数指针数组
- 函数参数中指向指针的指针
- 函数的参数是指针
- 作为函数参数的指针
- c++ 覆盖、重载、隐藏
- 第67章、使用ContentProvider操作联系人(从零开始学Android)
- LIBCMTD.lib与libcpmtd冲突的解决方法。
- Android中Bitmap,byte[],Drawable相互转化
- Android Dialog 多次启动的问题
- 带有指针参数的函数内给指针参数赋值时注意事项
- tts语音播报
- K3 增加关系字段SQL
- 第68章、使用ContentProvider操作通话记录(从零开始学Android)
- 观人有四招(转)
- C - main函数前的准备工作
- 种下一个愿望,会开出很多希望!
- iOS 各种控件默认高度(图示)
- Visual Studio 2010 快捷键