簡體   English   中英

二維char數組的malloc函數的分段錯誤

[英]Segmentation fault for malloc function of a 2D char array

這是我的代碼段,用於創建保存char數組的2D數組。 如果有人能夠找出原因,那將是很好的。 我試過同時使用malloc()calloc()將內存分配給2D數組,但沒有正號。

代碼段:

char** attrNames = (char **)malloc(3*sizeof(char*))
for (m = 0; m < 3; m++) {
        attrNames[m] = (char *)malloc(2 * sizeof(char*));
        strcpy(schema->attrNames[m], temp_buff2[m]);
    }

我試圖分配內存,然后進行循環,再次分配內存,然后將數據從名為temp_buff2的變量(具有字符數據)復制到char數組中。

試試下面的代碼。 即使您的項目中不太可能發生內存分配錯誤,但現在還是開發良好的錯誤處理反射的好時機-當您繼續進行更認真的項目時,它將節省您的培根。

請注意,char *指針需要一個緩沖區,該緩沖區等於字符串的長度加上一個額外的字節。 sizeof(char *)是一個很小的值,在64位體系結構上只有8-它只是存儲字符串開始處的內存地址的值。 請注意,我們需要在strlen()頂部加上+1,因為strcpy()將存儲一個額外的字節(\\ 0)作為字符串終止符。

char** attrNames = (char **)malloc(3*sizeof(char*));

if (!attrName)
{
  // handle memory error
}

for (m = 0; m < 3; m++) {
        attrNames[m] = (char *)malloc(strlen(temp_buff2[m])+1);
        if (!attrNames[m]) 
        {
           // handle memory error
        }

        strcpy(schema->attrNames[m], temp_buff2[m]);
    }

可以通過從函數中返回錯誤代碼或通過致命退出來處理內存錯誤,如下所示:

fprintf(stderr, "Out of memory\n");
exit(1);

您需要#include <stdlib.h>以獲得exit()的原型。

您需要為“ temp_buff2”中的內容保留足夠的空間。 例如:

char** attrNames = (char **)malloc(3*sizeof(char*))
for (m = 0; m < 3; m++) {
    attrNames[m] = (char *)malloc( strlen(temp_buff2[m]) + 1 );
    strcpy(schema->attrNames[m], temp_buff2[m]);
}

請注意,我在strlen結果中添加了1,這是因為我們需要為null char終止符保留一個額外的字節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM