我想传递一个指针给我的函数,并分配这个指针所指向的内存。我在其他帖子中读到,我应该传递一个双指针到这个函数,我这样做了,但我一直得到分割错误:
#include <iostream>
#include <stdlib.h>
using namespace std;
void allocate(unsigned char** t)
{
*t=(unsigned char*)malloc(3*sizeof(unsigned char));
if(*t == NULL)
cout<<"Allcoation failed"<<endl;
else
for(int m=0;m<3;m++)
*(t[m])=0;
}
int main()
{
unsigned char* t;
allocate(&t);
cout<<t[0]<<" "<<t[1]<<endl;
return 0;
}
的结果总是这样:分段故障(堆芯转储)
我不认为这段代码遗漏了什么。会出什么问题呢?
看这一行:*(t[m]) = 0;
。因为你给了t[m]
优先级,它将寻找m
-指向char
的指针并对其解引用。你真正想做的是解引用t
,并找到char
m
之后的地方,或者(*t)[m]
。做这样的改变会使你的代码完美地工作:http://ideone.com/JAWeS2
我觉得这行写错了:
*(t[m])=0;
考虑m = 2的情况。这是要写入的未分配内存。您没有做任何事情从运行时堆中获取它。
你可能会这样想:
t[0][m]=0;