[英]C programming: dynamically allocated memory for string and sqlite3_open doesn't work together
我对这个小程序有些困惑:
当我运行它时,它会一直循环到i = 999,然后给出“损坏的双链表”。 在func1中,printf显示str类似于str2,但在主str中为空。
我观察到如果执行以下两项操作之一,则该程序将运行良好:
谢谢!
#include <stdio.h>
#include <string.h>
#include <sqlite3.h>
#include <stdlib.h>
sqlite3 *conn;
void func1 (char* str)
{
char str2[3000];
strcpy (str2, "dawNUkjhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkdwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwaauhfuiahfsuehusehfseihfseifjhselfjslkejfklsejfksejksejfeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjUkjhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkdwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwaauhfuiahfsuehusehfseihfseifjhselfjslkejfklsejfksejksejfeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeejjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjUkjhkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkdwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwaauhfuiahfsuehusehfseihfseifjhselfjslkejfklsejfksejksejfeeeeeeejjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjdawfa");
// strcpy (str2, "Hello\n");
str = (char*) realloc (str, sizeof (char) * (strlen (str2) * 2));
strcat (str, str2);
printf ("func1: %s\n", str);
}
int main ()
{
int dataBaseResult;
char* str = malloc (sizeof (char));
/* open database */
dataBaseResult = sqlite3_open ("magazin.db", &conn);
if (dataBaseResult != 0)
{
fprintf (stderr, "Problem %s\n", sqlite3_errmsg (conn));
}
else
{
printf ("Opened succesfully!\n");
}
for (int i = 0; i < 1000; i++)
{
printf ("main: %d\n", i);
strcpy (str, "");
func1 (str);
printf ("main: %s\n", str);
}
/* close database */
sqlite3_close (conn);
return 0;
}
更改func1以正确更新传入的指针。 像这样:
void func1 (char **str)
{
char str2[3000];
char *tmp = NULL;
strcpy (str2, "...");
tmp = (char*) realloc (*str, sizeof (char) * (strlen (str2) * 2));
if (!tmp) {
*str = tmp;
}
strcat (*str, str2);
}
您正在分配1个字节的sizeof char。 malloc sizeof char * 3001
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.