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中运行此代码.
您在该代码中遇到两个问题:
auto像你这样的数组char * arr[2]不会自动创建new[]; 当函数返回时,它的存储空间消失了.这是垃圾的来源.你应该malloc()还是new[]它.
char **arr = malloc(2 * sizeof (*char));
Run Code Online (Sandbox Code Playgroud)strdup()做一个malloc(),所以你是无意义的malloc()存储,然后因为你覆盖指针而丢失.