方法返回的指针未正确分配给 C 中定义的另一个指针

伊沙德

我是 C 编程的初学者。在处理一个简单的任务时,我的代码因分段错误而崩溃。当我用 gdb 调试时,我发现从“manchester”方法返回的指针与 main 中分配的指针“encoded”不同。

我的代码如下

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

char* manchester(char* bitstring);
char* differential_manchester(char* bitstring);

int main(){
    int method;
    scanf("%i\n", &method);   //scan the method to encode
    char* bitstring = (char *) malloc(100*sizeof(char)); // assumed max length = 100
    scanf("%s", bitstring);

    char* encoded;
    if(method == 0){
        char* encoded = manchester(bitstring); // where the confusion occur
    }
    else if (method == 1){
        char* encoded = differential_manchester(bitstring);
    }
    printf("%s", encoded);
    free(encoded);
    free(bitstring);

    return 0;
}

char* manchester(char* bitstring){
    char* encoded_st = (char*) malloc(200*sizeof(char));
    int i = 0, j = 0;
    while (bitstring[i] != '\0' ){
        if (bitstring[i++] == '0'){
            encoded_st[j++] = '1';
            encoded_st[j++] = '0';
        }
        else{
            encoded_st[j++] = '0';
            encoded_st[j++] = '1';
        }
    }
    encoded_st[j++] = 0; //append null character at end
    return encoded_st;
}

char* differential_manchester(char* bitstring){
    //TODO: yet to implement
    return NULL;
} 

gdb调试

(gdb) b encode.c:14
Breakpoint 1 at 0x1222: file encode.c, line 14.
(gdb) run
Starting program: /home/ishad/Desktop/computer communication/a.out 
0
1010

Breakpoint 1, main () at encode.c:14
14      if(method == 0){
(gdb) n
15          char* encoded = manchester(bitstring);
(gdb) s
manchester (bitstring=0x7ffff7e5a2d4 <__GI___libc_malloc+116> "I\211\300H\205\300\017\204\300") at encode.c:27
27  char* manchester(char* bitstring){
(gdb) n
28      char* encoded_st = (char*) malloc(200*sizeof(char));
(gdb) n
29      int i = 0, j = 0;
(gdb) n
30      while (bitstring[i] != '\0' ){
(gdb) n
31          if (bitstring[i++] == '0'){
(gdb) n
36              encoded_st[j++] = '0';

...

(gdb) n
30      while (bitstring[i] != '\0' ){
(gdb) n
40      encoded_st[j++] = 0; //append null character at end
(gdb) n
41      return encoded_st;
(gdb) p encoded_st
$1 = 0x555555559720 "01100110"
(gdb) n
42  }
(gdb) n
main () at encode.c:20
20      printf("%s", encoded);
(gdb) p encoded
$2 = 0x7fffffffdec0 "\001"

我的问题是为什么 encoding_st 指针与编码指针不同。我试图用几个关键词来寻找原因。但我没有找到类似的问题。:(

来自莫斯科的弗拉德

encoded在 if 语句的范围内重新声明了同名变量

char* encoded;
if(method == 0){
    char* encoded = manchester(bitstring); // where the confusion occur
}
else if (method == 1){
    char* encoded = differential_manchester(bitstring);
}

因此,encoded在相对于 if 语句的外部作用域中声明的变量保持未初始化状态。

删除 if 语句中的声明

char* encoded;
if(method == 0){
    encoded = manchester(bitstring); // where the confusion occur
}
else if (method == 1){
    encoded = differential_manchester(bitstring);
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

C ++将函数指针分配给另一个

从C ++中的另一个线程读取指针

C#:将数组分配给另一个数组:复制还是指针交换?

是否可以将C ++指针分配给Python对象的属性,然后在另一个C ++函数中将其作为C ++指针检索?

引用函数中另一个指针的C指针

增加一个整数指针并将增加的指针的值赋给 C++ 中的另一个变量

将一个分配的指针分配给另一个分配的指针

可以将结构指针方法中的指针重新分配给另一个实例吗?

C 指针不等于另一个

C指向另一个变量的指针

制作指向另一个 C 程序的指针

传递c ++对象作为指针,以在Rcpp中的另一个函数中重用

在 C 中的另一个函数中填充指向函数的指针数组

C ++:在程序中创建一个指针,然后在另一个程序中访问该位置

如何从另一个文件访问c代码中嵌套结构的指针成员

将数据写入C中另一个程序的指针吗?

C++ 指向另一个类中不同类的指针

如何在C ++中将指向一个类的指针复制到另一个类中?

将函数指针强制转换为C中的另一个函数指针是否安全?

我在将指针复制到 C++ 中的另一个指针时遇到问题

C ++数组地址分配给指针

将指针分配给变量vs将指针分配给C中的数组

将void指针分配给另一个void指针

将指针分配给另一个指针崩溃

如何将共享指针的引用分配给另一个共享指针

C 将指针设置为另一个指针并释放

在C中将一个结构分配给另一个

使用C指针时,Fortran数组中的更改导致另一个数组中的更改

使用指针从 C 中的 main 中的另一个函数更改字符串值