在函数内分配内存并将其返回

时间:2014-08-19 15:18:15

标签: c memory pointers allocation malloc

我想传递一个指向我的函数的指针并分配这个指针所指向的内存。我在其他帖子中读到我应该通过双指针指向这个函数,我这样做了,但是我一直在分段错误:

#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;
}

结果总是如此: 分段错误(核心转储)

我不认为此代码中缺少任何内容。可能有什么不对?

2 个答案:

答案 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;