在C语言中,全局指针和局部指针的动态内存分配

13 浏览
0 Comments

在C语言中,全局指针和局部指针的动态内存分配

我试图为一个双指针分配值,但是当我的指针在局部声明时,它可以正常工作,而当我在全局声明时,则无法工作。\n以下是上述情况的代码:\n// 在全局声明,无法工作\n#include\n#include\nint **x;\nint main() {\n x=(int**)malloc(sizeof(int*));\n x[1][2]=10;\n printf(\"%d\",x[1][2]);\n}\n// 在局部声明,工作正常\n#include\n#include\nint main() {\n int **x;\n x=(int**)malloc(sizeof(int*));\n x[1][2]=10;\n printf(\"%d\",x[1][2]);\n}

0
0 Comments

在这两种情况下,这段代码是无效的。你需要为指针分配内存,然后为对象分配内存。你只为指针分配了空间,但没有为对象分配空间。

这是未定义的行为。

出现的原因是,在这两种情况下,指针指向的对象没有分配内存空间。在C语言中,如果你想使用指针来引用一个对象,你需要先为指针分配内存空间,然后再为对象分配内存空间。但是在这里,只为指针分配了内存空间,而没有为对象分配内存空间,导致了代码的无效性。

解决方法是,你需要为指针和对象分配内存空间。具体的做法如下:

对于全局指针,你可以在程序开始之前的全局初始化中为指针和对象分配内存空间。例如:

#include 
int* global_ptr;  // 全局指针
void init_global_ptr() {
    global_ptr = malloc(sizeof(int));  // 为指针分配内存空间
    *global_ptr = 0;  // 为对象分配内存空间并初始化
}
int main() {
    init_global_ptr();
    // 使用全局指针和对象
    // ...
    free(global_ptr);  // 释放内存空间
    return 0;
}

对于局部指针,你可以在函数内部为指针和对象分配内存空间。例如:

#include 
void allocate_local_ptr() {
    int* local_ptr = malloc(sizeof(int));  // 为指针分配内存空间
    *local_ptr = 0;  // 为对象分配内存空间并初始化
    // 使用局部指针和对象
    // ...
    free(local_ptr);  // 释放内存空间
}
int main() {
    allocate_local_ptr();
    return 0;
}

通过以上的解决方法,你可以正确地为指针和对象分配内存空间,避免了代码的无效性和未定义的行为。这样,你就可以安全地使用这些指针和对象了。

0