在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