堆损坏 c++ 返回表指针的函数

Heap corruption c++ Function to return a table pointer

本文关键字:指针 函数 返回 损坏 c++      更新时间:2023-10-16

我遇到了一个程序的问题,我已经尝试自己解决了几天,但仍然不知道我到底做错了什么。你能帮忙吗?首先,我认为大惊小怪的都是关于字符表末尾的空值,但正如你所看到的,我修复了这个问题,Visual Studio 仍然告诉我我以某种方式导致堆损坏:

"检测到堆损坏:在 0x02BAEC90 处的正常块 (#186( 之后。CRT 检测到应用程序在堆缓冲区结束后写入内存。

感谢所有希望提前帮助初学者的人!

#include <iostream> 
#include <cstring>  
using namespace std;  
#define T_SIZE 1001  
char* string_merge(char *, char *);  
int main()
{  
    int t,n;    
    char S1[T_SIZE], S2[T_SIZE], *S;    
    cin >> t; /* number of tests */   
    cin.getline(S1,T_SIZE);    
    while(t)
    {      
        cin.getline(S1,T_SIZE,' ');     
        cin.getline(S2,T_SIZE);           
        S=string_merge(S1,S2);     
        cout << S << endl;     
        delete[] S;     
        t--;      
    }    
    return 0; 
}
char * string_merge(char * n, char * k)
{
    char *Merged;
    char *n1;
    char *k1;
    n1 = n;
    k1 = k;
    if (strlen(n1) < strlen(k1))
    {
        const int length = (2*strlen(n1));
        Merged = new char[length+1];
        Merged[length] = '';
        for (int i = 0;i < (length);i++)
        {
            Merged[(2*i)] = *n1 ;
            Merged[(2*i) + 1] = *k1 ;
            if (i < (length - 1))
            {
                n1++;
                k1++;
            }

        }
    return Merged;
    }
    else
    {
        const int length = (2 * strlen(k1));
        Merged = new char[length + 1];
        for (int i = 0;i < (length);i++)
        {
            Merged[(2 * i)] = *n1;
            Merged[(2 * i) + 1] = *k1;
            n1++;
            k1++;
        }
        Merged[length] = '';
        return Merged;
    }

}

难道第一个字符串不以 ' ' 结尾吗?

同样在阅读数字后

cin >> t; /* number of tests */ 

您还应该忽略用于提交数字的换行符,因此请替换第一个 getline((

cin.getline(S1,T_SIZE);    
while(t) 
...

cin.ignore();
while(t) 
...