Yamatehhhhhh 发表于 2017-09-30 16:57

诡异问题求助,调用malloc函数之后,一个无关的字符数组的内容被覆盖掉了

本帖最后由 Yamatehhhhhh 于 2017-09-30 17:04 编辑

程序代码如下,在外层while循环到第三次时,调用完malloc函数(第16行),发现字符数组buffer的值被修改了,看上去像是被覆盖了。
#include <stdio.h>
#include <stdlib.h>
#define NUMERIC 0
#define OPERATOR 1

int main() {
    char buffer[] = "1.5+2*3^4/-5";             // The expression buffer
    char *pbuffer = buffer;                            // The pointer to expression buffer
    char *pelements[] = {NULL};             // Restore the elements have been parsed
    size_t index = 0;                     // The index of element is being parse
    int type = NUMERIC;                     // The type of current index, NUMERIC or OPERATOR

    while(*pbuffer != '\0') {
      int i = 0;
      printf("Line %d: %s\n", __LINE__, buffer);                // The index for pelements
      pelements = (char *)malloc(320);         // Alloc memory for pointer
      printf("Line %d: %s\n", __LINE__, buffer);

      if(type == NUMERIC) {
            printf("Line %d: %s\n", __LINE__, buffer);
            *(pelements+i++) = *pbuffer++;       // Read one char firstly
            while(*pbuffer!='-' && *pbuffer!='+' && *pbuffer!='/' && *pbuffer!='*' && *pbuffer!='^' && *pbuffer!='\0') {
                *(pelements+i++) = *pbuffer++;
            }

            *(pelements+i) = '\0';               // Add '\0'
            index++;
            type = OPERATOR;
      } else {
            if(*pbuffer=='\0') break;
            *(pelements+i++) = *pbuffer++;
            *(pelements+i) = '\0';
            index++;
            type = NUMERIC;
            printf("Line %d: %s\n", __LINE__, buffer);
      }
    }
}

Yamatehhhhhh 发表于 2017-09-30 16:59

本帖最后由 Yamatehhhhhh 于 2017-09-30 17:05 编辑

程序的执行结果是这样的:

Line 15: 1.5+2*3^4/-5
Line 17: 1.5+2*3^4/-5
Line 20: 1.5+2*3^4/-5
Line 15: 1.5+2*3^4/-5
Line 17: 1.5+2*3^4/-5
Line 35: 1.5+2*3^4/-5
Line 15: 1.5+2*3^4/-5
Line 17:

Yamatehhhhhh 发表于 2017-09-30 17:02

程序里几行print语句都是一样的,就是打印buffer这个字符数组的值,让人百思不得解的是为什么调用malloc给另一个指针分配内存之后,buffer的值就像被覆盖了一样。

hellioncu 发表于 2017-09-30 17:27

char *pelements[?]

Yamatehhhhhh 发表于 2017-09-30 17:54

回复 4# hellioncu

一语道破天机,因为不确定数组元素个数,就没有指定数组的大小,指定数组大小后这个问题就解决了,谢谢! 还是自己太随意了啊。
页: [1]
查看完整版本: 诡异问题求助,调用malloc函数之后,一个无关的字符数组的内容被覆盖掉了