我有一个SmartArray的struct typedef,它有一个变量char **数组。我一直在尝试调试代码几个小时,并取得了很多进展。但是,我坚持这个特殊的bug。我有一个函数来打印出所述数组。它将打印两次,然后在第三次打印时根本不打印!我有一种感觉,这与我如何将malloc添加到数组中有关,因为一个数据打印不正确。对于数组的最后一部分,它打印“Testing Na”。有任何想法吗?我很感激你的帮助。
这是我怀疑的功能部分是原因,但是,我似乎无法找到它://为字符串分配最小空间
printf("approaching malloc\n");
strPtr = malloc( sizeof(char) * (strlen(str) + 1) );
if(strPtr == NULL)
{
return NULL;
}
printf("made it past malloc!\n");
strcpy(strPtr, str);
//if crash probably this code
smarty->array[index] = strPtr;
if(smarty->array[0] == NULL)
{
return NULL;
}
return strPtr;
这是我的测试代码:
typedef struct SmartArray
{
// We will store an array of strings (i.e., an array of char arrays)
char **array;
// Size of array (i.e., number of elements that have been added to the array)
int size;
// Length of the array (i.e., the array's current maximum capacity)
int capacity;
} SmartArray;
int main(void)
{
int i; char buffer[32];
SmartArray *smarty1 = createSmartArray(-1);
printf("Array created\n");
// Print the contents of smarty1.
printf("\n-- SMART ARRAY 1: --\n");
printSmartArray(smarty1);
printf("Made it past print!\n");
put(smarty1,"Hi, my name is ");
put(smarty1, "Hello, my name is");
put(smarty1, "Testing Names");
printf("made it past put!\n");
printf("smart away is now\n");
printSmartArray(smarty1);
printf("end of main!\n");
我觉得这是一个非常明显的东西,我只是在俯视,因为我是一个新手。
这是我试图让它在内存中看起来像的图片: click here for memory diagram
更新:我弄清楚为什么它不打印所有的名字,但程序段错误打印功能。
答案 0 :(得分:0)
我认为这是因为您尝试使用malloc
扩展数组。 C数组一次只能指向一个存储块。当您使用malloc
时,它将分配一个全新的存储块,并且您在编写smarty->array[index] = strPtr
时尝试将其添加到数组的末尾。
如果您想扩展C数组的大小,请改用realloc
,这将为您的阵列分配一个新的更大的内存块,并将现有内容复制到其中。
如果这不能解决问题,您可以发布整个put
函数吗?