指向char*值的问题

bay*_*der 1 c++ memory pointers

这段代码有什么问题(正确打印arr [0]但是我遇到arr [1]的问题...打印一些奇怪的字符):

using namespace std;
char ** setName() {
    char * arr[2];
    for (int i=0;i<2;i++)
       arr[i] = (char*)malloc(100);
    arr[0] = strdup("Robert");
    arr[1] = strdup("Jose");
    return arr;
}
int main()
{
    char **arr;
    arr = setName();
    printf("First name is %s\n", arr[0]);
    printf("Second name is %s\n", arr[1]);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果重要,我使用Visual Studio 8在Windows中运行此代码.

gee*_*aur 5

您在该代码中遇到两个问题:

  1. auto像你这样的数组char * arr[2]不会自动创建new[]; 当函数返回时,它的存储空间消失了.这是垃圾的来源.你应该malloc()还是new[]它.

    char **arr = malloc(2 * sizeof (*char));
    
    Run Code Online (Sandbox Code Playgroud)
  2. strdup()做一个malloc(),所以你是无意义的malloc()存储,然后因为你覆盖指针而丢失.