如何将2D char指针发送到内存分配函数?

时间:2015-08-21 06:57:16

标签: c pointers

<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
 <div class="COMMENTBOX"> 
<h1>Comment Box 1</h1>
<div class="share">
    <li><a href="#"><button id="shareit"><h3><i class="fa fa-share-alt faa-pulse animated"></i>Share</h3></button></a>
    <ul class="share-list">
        
		<li><a href="#"><i class="fa fa-facebook"></i></a></li>
		
		<li><a href="#"><i class="fa fa-twitter"></i></a></li>
		
		<li><a href="#"><i class="fa fa-google-plus"></i></a></li>
   
   </ul>
         </li>
    </div>
     
     </DIV>

 <div class="COMMENTBOX2"> 
<h1>Comment Box 2</h1>
<div class="share">
    <li><a href="#"><button id="shareit"><h3><i class="fa fa-share-alt faa-pulse animated"></i>Share</h3></button></a>
    <ul class="share-list">
        
		<li><a href="#"><i class="fa fa-facebook"></i></a></li>
		
		<li><a href="#"><i class="fa fa-twitter"></i></a></li>
		
		<li><a href="#"><i class="fa fa-google-plus"></i></a></li>
   
   </ul>
         </li>
    </div>
     
     </DIV>

当我尝试编译此代码时,它会出现一些错误。我怎么解决这个问题?如何将2D char指针发送到C?中的函数?

2 个答案:

答案 0 :(得分:3)

首先,根据目前的代码,我看到两个问题。

  1. 您正在将ptrArray传递给函数并尝试在函数内部分配内存。请注意,C使用pass by值进行函数参数传递,因此,如果要将内存分配给ptrArray并期望将 refeclted 返回给调用者,则不使用{{1你需要传递指向那个`ptrArray的指针。

  2. 代码中的
  3. return

    你正在泄露记忆。使用ptr[i] = (char*)malloc(20 * sizeof(char)); ptr[i] = "value"; 分配内存后,应使用malloc()将数据复制到已分配的内存中。

  4. 那说了一些建议:

    1. strcpy() malloc()C家人的回复价值see why not to cast
    2. sizeof(char)保证在C中为1。不需要使用它作为乘数。
    3. 在使用返回的指针之前,请务必检查malloc()是否成功。

答案 1 :(得分:2)

你可能需要这个(没有错误检查而不是调试代码):

void createDynamicArrayForChar(int dimension, char ***ptr)
{
    *ptr = (char**)malloc(dimension*sizeof(char*));

    for (int i = 0; i < dimension; i++)
    {
        (*ptr)[i] = (char*)malloc(20 * sizeof(char));
        strcpy((*ptr)[i],"value");
    }
}

char **createDynamicArrayForChar(int dimension)
{
    char **ptr = (char**)malloc(dimension*sizeof(char*));

    for (int i = 0; i < dimension; i++)
    {
        ptr[i] = (char*)malloc(20 * sizeof(char));
        strcpy(ptr[i],"value");
    }

    return ptr;
}

int main()
{
    char **ptrArray;
    ptrArray = createDynamicArrayForChar(5);
    ...

阅读Sourav Ghosh的回答。