我想传递一个指向我的函数的指针并分配这个指针所指向的内存。我在其他帖子中读到我应该通过双指针指向这个函数,我这样做了,但是我一直在分段错误:
#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;
}
结果总是如此: 分段错误(核心转储)
我不认为此代码中缺少任何内容。可能有什么不对?
答案 0 :(得分:2)
请看这一行:*(t[m]) = 0;
。由于您已赋予t[m]
优先权,因此它将查找指向m
的{{1}}指针并取消引用该指针。您实际想要做的是取消引用char
并在此之后找到t
char
个地方,或m
。进行此更改会使您的代码完美运行:http://ideone.com/JAWeS2
答案 1 :(得分:0)
我认为这条线不应该走到哪里:
*(t[m])=0;
考虑m是2的情况。那是你正在写的未分配的内存。你没有做任何事情来从运行时堆中声明它。
你可能会想到这样的事情:
t[0][m]=0;