我想创建一个程序,该程序创建一个2D数组并从stdin中填充它,以备后用。最初,我对其进行了设计,以使函数takeInput()接受用户的输入并返回包含所有一位整数的单个字符串的char *。然后,我的目的是获取此char *并将其作为参数传递给第二个函数createArray(),该函数将相应地填充数组。
当我的参数char *的值开始在第二个函数内更改(丢失值)时,就会发生此问题。
注:我已经在第一个函数内使用malloc为char *分配了内存,目的是不要将其值设为函数的局部值。
我的主要表情如下:
#include <stdio.h>
#include "functions.h"
int main(int argc, const char * argv[]) {
const char *string = takeInput();
int **initState = createArray(3, 3, string);
return 0;
}
这是第一个功能:
const char* takeInput() {
char string2[10];
/* some code */
char *string0 = malloc(sizeof(string2));
string0 = string2;
return string0;
}
这是第二个功能:
int **createArray(int rows, int columns, const char *string) {
int **array;
int traverse = 0;
// allocating memory for number of rows
array = malloc(rows * sizeof(int*));
// allocating memory for number of columns
for(int i = 0 ; i < rows ; i++) {
array[i] = malloc(columns * sizeof(int));
}
// populating indices in 2D array with values from string
for(int i = 0 ; i < rows ; i++) {
for(int j = 0 ; j < columns ; j++) {
// converting chars to digits or the '_' char
if (string[traverse] != 95) {
array[i][j] = (string[traverse] - 48);
}
else {
array[i][j] = 48;
}
traverse++;
}
}
return array;
}
const char *string
的值在我的代码到达第一个for循环后立即更改,并在其余代码中减小。任何想法/建议都将不胜感激!
程序具有未定义的行为,因为在此功能中
const char* takeInput() {
char string2[10];
/* some code */
char *string0 = malloc(sizeof(string2));
string0 = string2;
return string0;
}
指向本地数组的指针
string0 = string2;
return string0;
返回。此外,该函数还会发生内存泄漏,因为已分配内存,并且其地址已分配给指针string0,然后重新分配了指针。
如果数组string2包含一个字符串,则可以使用标准的C函数strcpy之类的方式>>
strcpy( string0, string2 );
您返回一个局部变量的地址,一旦函数返回,它的生命周期将结束。之后访问该地址将产生不确定的行为。