添加和打印由指向结构

时间:2017-02-12 06:26:50

标签: c dynamic allocation

我有一个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

更新:我弄清楚为什么它不打印所有的名字,但程序段错误打印功能。

1 个答案:

答案 0 :(得分:0)

我认为这是因为您尝试使用malloc扩展数组。 C数组一次只能指向一个存储块。当您使用malloc时,它将分配一个全新的存储块,并且您在编写smarty->array[index] = strPtr时尝试将其添加到数组的末尾。

如果您想扩展C数组的大小,请改用realloc,这将为您的阵列分配一个新的更大的内存块,并将现有内容复制到其中。

如果这不能解决问题,您可以发布整个put函数吗?