[英]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.