gpt4 book ai didi

C - 使用双指针动态内存分配

转载 作者:太空狗 更新时间:2023-10-29 15:18:29 32 4
gpt4 key购买 nike

我在名为 myalloc() 的函数中分配一些内存,并在 main() 中使用和释放它。我正在使用双指针来执行此操作,这是工作正常的代码,

//Example # 1

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void myalloc( char ** ptr)
{
*ptr = malloc(255);
strcpy( *ptr, "Hello World");
}

int main()
{
char *ptr = 0;
myalloc( &ptr );
printf("String is %s\n", ptr);
free(ptr);

return 0;
}

但是下面的代码不起作用并且给出了段错误。我认为这是使用双指针的另一种方式。

//Example # 2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void myalloc( char ** ptr)
{
*ptr = malloc(255);
strcpy( *ptr, "Hello World");
}

int main()
{
char **ptr = 0;
myalloc( ptr );
printf("String is %s\n", *ptr);
free(*ptr);

return 0;
}

请解释一下,为什么在第二个示例中出现段错误。

注意:语言 = C,编译器 = GCC 4.5.1,操作系统 = Fedora Core 14

此外,我知道已经有人问过一些与使用双指针分配内存有关的问题,但他们没有解决这个问题,所以请不要将其标记为重复性问题。

最佳答案

char **ptr = 0;
*ptr = malloc(255);

尝试将malloc 返回的指针写入ptr 指向的地址(char* 类型)。地址原来是... 0,这是不可写的内存。

ptr 应指向您可以写入的地址。您可以执行以下操作之一:

char *stackPtr; // Pointer on the stack, value irrelevant (gets overwritten)
ptr = &stackPtr;
// or
char **ptr = alloca(sizeof(char*)); // Equivalent to above
// or
char **ptr = malloc(sizeof(char*)); // Allocate memory on the heap
// note that ptr can be 0 if heap allocation fails

关于C - 使用双指针动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6288640/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com