堆损坏 c++ 返回表指针的函数
Heap corruption c++ Function to return a table pointer
我遇到了一个程序的问题,我已经尝试自己解决了几天,但仍然不知道我到底做错了什么。你能帮忙吗?首先,我认为大惊小怪的都是关于字符表末尾的空值,但正如你所看到的,我修复了这个问题,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)
...
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址